AoPrepareDepthBuffers2CS.hlsl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // RUN: %dxc -E main -T cs_6_0 %s | FileCheck %s
  2. // CHECK: flattenedThreadIdInGroup
  3. // CHECK: threadId
  4. // CHECK: textureLoad
  5. // CHECK: textureStore
  6. //
  7. // Copyright (c) Microsoft. All rights reserved.
  8. // This code is licensed under the MIT License (MIT).
  9. // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
  10. // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
  11. // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
  12. // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
  13. //
  14. // Developed by Minigraph
  15. //
  16. // Author: James Stanard
  17. //
  18. #include "SSAORS.hlsli"
  19. Texture2D<float> DS4x : register(t0);
  20. RWTexture2D<float> DS8x : register(u0);
  21. RWTexture2DArray<float> DS8xAtlas : register(u1);
  22. RWTexture2D<float> DS16x : register(u2);
  23. RWTexture2DArray<float> DS16xAtlas : register(u3);
  24. cbuffer ConstantBuffer_x : register(b0)
  25. {
  26. float2 InvSourceDimension;
  27. }
  28. [RootSignature(SSAO_RootSig)]
  29. [numthreads( 8, 8, 1 )]
  30. void main( uint3 Gid : SV_GroupID, uint GI : SV_GroupIndex, uint3 GTid : SV_GroupThreadID, uint3 DTid : SV_DispatchThreadID )
  31. {
  32. float m1 = DS4x[DTid.xy << 1];
  33. uint2 st = DTid.xy;
  34. uint2 stAtlas = st >> 2;
  35. uint stSlice = (st.x & 3) | ((st.y & 3) << 2);
  36. DS8x[st] = m1;
  37. DS8xAtlas[uint3(stAtlas, stSlice)] = m1;
  38. if ((GI & 011) == 0)
  39. {
  40. uint2 st = DTid.xy >> 1;
  41. uint2 stAtlas = st >> 2;
  42. uint stSlice = (st.x & 3) | ((st.y & 3) << 2);
  43. DS16x[st] = m1;
  44. DS16xAtlas[uint3(stAtlas, stSlice)] = m1;
  45. }
  46. }