You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.1 KiB
31 lines
1.1 KiB
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceWindDataUpdateDefs.cs.hlsl"
|
|
|
|
#pragma kernel WindDataCopyHistoryMain
|
|
|
|
uint _WindDataQueueCount;
|
|
int4 _WindParamAddressArray[MAX_WIND_PARAMS_COUNT];
|
|
int4 _WindHistoryParamAddressArray[MAX_WIND_PARAMS_COUNT];
|
|
|
|
ByteAddressBuffer _WindDataUpdateIndexQueue;
|
|
RWByteAddressBuffer _WindDataBuffer;
|
|
|
|
[numthreads(64, 1, 1)]
|
|
void WindDataCopyHistoryMain(uint3 dispatchThreadID : SV_DispatchThreadID)
|
|
{
|
|
if (dispatchThreadID.x >= _WindDataQueueCount)
|
|
return;
|
|
|
|
uint instanceIndex = _WindDataUpdateIndexQueue.Load(dispatchThreadID.x << 2);
|
|
uint instanceByteOffset = instanceIndex * 16;
|
|
|
|
uint4 windParams[MAX_WIND_PARAMS_COUNT];
|
|
|
|
UNITY_UNROLL
|
|
for (int i = 0; i < MAX_WIND_PARAMS_COUNT; ++i)
|
|
windParams[i] = _WindDataBuffer.Load4(_WindParamAddressArray[i].x + instanceByteOffset);
|
|
|
|
UNITY_UNROLL
|
|
for (int j = 0; j < MAX_WIND_PARAMS_COUNT; ++j)
|
|
_WindDataBuffer.Store4(_WindHistoryParamAddressArray[j].x + instanceByteOffset, windParams[j]);
|
|
}
|