195 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#pragma kernel MergeInstancedIndirectBuffers
 | 
						|
 | 
						|
struct IndirectShaderData
 | 
						|
{
 | 
						|
	float4x4 PositionMatrix;
 | 
						|
	//float4x4 InversePositionMatrix;
 | 
						|
	float4 ControlData;
 | 
						|
};
 | 
						|
 | 
						|
uint MergeSourceBufferCount0;
 | 
						|
uint MergeSourceBufferCount1;
 | 
						|
uint MergeSourceBufferCount2;
 | 
						|
uint MergeSourceBufferCount3;
 | 
						|
uint MergeSourceBufferCount4;
 | 
						|
uint MergeSourceBufferCount5;
 | 
						|
uint MergeSourceBufferCount6;
 | 
						|
uint MergeSourceBufferCount7;
 | 
						|
uint MergeSourceBufferCount8;
 | 
						|
uint MergeSourceBufferCount9;
 | 
						|
uint MergeSourceBufferCount10;
 | 
						|
uint MergeSourceBufferCount11;
 | 
						|
uint MergeSourceBufferCount12;
 | 
						|
uint MergeSourceBufferCount13;
 | 
						|
uint MergeSourceBufferCount14;
 | 
						|
//uint MergeSourceBufferCount15;
 | 
						|
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer0;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer1;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer2;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer3;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer4;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer5;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer6;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer7;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer8;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer9;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer10;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer11;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer12;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer13;
 | 
						|
StructuredBuffer<IndirectShaderData> MergeSourceBuffer14;
 | 
						|
//StructuredBuffer<IndirectShaderData> MergeSourceBuffer15;
 | 
						|
 | 
						|
AppendStructuredBuffer<IndirectShaderData> MergeBuffer;
 | 
						|
 | 
						|
[numthreads(32,1,1)]
 | 
						|
void MergeInstancedIndirectBuffers (uint3 id : SV_DispatchThreadID)
 | 
						|
{
 | 
						|
	uint instanceId = id.x;
 | 
						|
	if (instanceId < MergeSourceBufferCount0)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer0[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer0[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer0[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount1)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer1[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer1[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer1[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount2)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer2[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer2[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer2[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount3)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer3[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer3[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer3[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount4)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer4[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer4[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer4[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount5)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer5[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer5[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer5[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount6)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer6[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer6[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer6[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount7)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer7[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer7[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer7[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount8)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer8[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer8[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer8[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount9)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer9[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer9[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer9[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount10)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer10[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer10[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer10[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount11)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer11[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer11[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer11[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount12)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer12[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer12[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer12[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount13)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer13[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer13[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer13[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	if (instanceId < MergeSourceBufferCount14)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer14[id.x].PositionMatrix;
 | 
						|
		//instanceData.InversePositionMatrix = MergeSourceBuffer14[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer14[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}
 | 
						|
 | 
						|
	/*if (instanceId < MergeSourceBufferCount15)
 | 
						|
	{
 | 
						|
		IndirectShaderData instanceData;
 | 
						|
		instanceData.PositionMatrix = MergeSourceBuffer15[id.x].PositionMatrix;
 | 
						|
		instanceData.InversePositionMatrix = MergeSourceBuffer15[id.x].InversePositionMatrix;
 | 
						|
		instanceData.ControlData = MergeSourceBuffer15[id.x].ControlData;
 | 
						|
		MergeBuffer.Append(instanceData);
 | 
						|
	}*/
 | 
						|
}
 |