| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // RUN: %dxc -E main -T cs_6_0 -O0 %s | FileCheck %s
- // CHECK: threadId
- // CHECK: bufferUpdateCounter
- // CHECK: bufferLoad
- // CHECK: bufferStore
- //
- // Copyright (c) Microsoft. All rights reserved.
- // This code is licensed under the MIT License (MIT).
- // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
- // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
- // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
- // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
- //
- // Developed by Minigraph
- //
- // Author: Julia Careaga
- // James Stanard
- //
- #include "ParticleUpdateCommon.hlsli"
- #include "ParticleUtility.hlsli"
- StructuredBuffer< ParticleSpawnData > g_ResetData : register( t0 );
- RWStructuredBuffer< ParticleMotion > g_OutputBuffer : register( u2 );
- [RootSignature(Particle_RootSig)]
- [numthreads(64, 1, 1)]
- void main( uint3 DTid : SV_DispatchThreadID )
- {
- uint index = g_OutputBuffer.IncrementCounter();
- if (index >= MaxParticles)
- return;
-
- uint ResetDataIndex = RandIndex[DTid.x].x;
- ParticleSpawnData rd = g_ResetData[ResetDataIndex];
-
- float3 emitterVelocity = EmitPosW - LastEmitPosW;
- float3 randDir = rd.Velocity.x * EmitRightW + rd.Velocity.y * EmitUpW + rd.Velocity.z * EmitDirW;
- float3 newVelocity = emitterVelocity * EmitterVelocitySensitivity + randDir;
- float3 adjustedPosition = EmitPosW - emitterVelocity * rd.Random + rd.SpreadOffset;
- ParticleMotion newParticle;
- newParticle.Position = adjustedPosition;
- newParticle.Rotation = 0.0;
- newParticle.Velocity = newVelocity + EmitDirW * EmitSpeed;
- newParticle.Mass = rd.Mass;
- newParticle.Age = 0.0;
- newParticle.ResetDataIndex = ResetDataIndex;
- g_OutputBuffer[index] = newParticle;
- }
|