ParticleVS.hlsl 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // RUN: %dxc -E main -T vs_6_0 %s | FileCheck %s
  2. // CHECK: bufferLoad
  3. //
  4. // Copyright (c) Microsoft. All rights reserved.
  5. // This code is licensed under the MIT License (MIT).
  6. // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
  7. // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
  8. // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
  9. // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
  10. //
  11. // Developed by Minigraph
  12. //
  13. // Author(s): James Stanard
  14. #include "ParticleUpdateCommon.hlsli"
  15. #include "ParticleUtility.hlsli"
  16. StructuredBuffer<ParticleVertex> g_VertexBuffer : register( t0 );
  17. StructuredBuffer<uint> g_IndexBuffer : register( t3 );
  18. [RootSignature(Particle_RootSig)]
  19. ParticleVertexOutput main( uint BillboardVertex : SV_VertexID, uint InstanceId : SV_InstanceID )
  20. {
  21. ParticleVertex In = g_VertexBuffer[ g_IndexBuffer[InstanceId] & 0x3FFFF ];
  22. ParticleVertexOutput Out;
  23. Out.TexCoord = float2((BillboardVertex >> 1) & 1, BillboardVertex & 1);
  24. Out.Color = In.Color;
  25. Out.TexID = In.TextureID;
  26. float2 Corner = lerp( float2(-1, 1), float2(1, -1), Out.TexCoord );
  27. float3 Position = mul( (float3x3)gInvView, float3(Corner * In.Size, 0) ) + In.Position;
  28. Out.Pos = mul( gViewProj, float4(Position, 1) );
  29. Out.LinearZ = Out.Pos.w * gRcpFarZ;
  30. return Out;
  31. }