A game about forced loneliness, made by TACStudios
at master 70 lines 3.1 kB view raw
1#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch webgpu gles3 2//#pragma enable_d3d11_debug_symbols 3 4#include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeUploadDataCommon.hlsl" 5 6#pragma kernel UploadDataL2 7 8RWTexture3D<float4> _Out_L2_0; 9RWTexture3D<float4> _Out_L2_1; 10RWTexture3D<float4> _Out_L2_2; 11RWTexture3D<float4> _Out_L2_3; 12 13 14[numthreads(64, 1, 1)] 15void UploadDataL2(uint3 dispatchThreadID : SV_DispatchThreadID) 16{ 17 uint chunkIndex = dispatchThreadID.z; 18 uint chunkProbeIndex = dispatchThreadID.x * 4; // One thread processes 4 probes. 19 20 // We extract 4 probes at a time. 21 // This is driven by the minimum amount of data that we can load at once with a ByteAddressBuffer 22 // Shared data is currently 1 byte per probe so we can load at minimum 4 probes at a time with one ByteAddressBuffer.Load(uint) 23 24 25 uint offsetL2_0 = _L2_0Offset + chunkIndex * _L2Size + chunkProbeIndex * _L2ProbeSize; // 4 x 4 bytes probes. 26 uint offsetL2_1 = _L2_1Offset + chunkIndex * _L2Size + chunkProbeIndex * _L2ProbeSize; // 4 x 4 bytes probes. 27 uint offsetL2_2 = _L2_2Offset + chunkIndex * _L2Size + chunkProbeIndex * _L2ProbeSize; // 4 x 4 bytes probes. 28 uint offsetL2_3 = _L2_3Offset + chunkIndex * _L2Size + chunkProbeIndex * _L2ProbeSize; // 4 x 4 bytes probes. 29 30 // Extract L2 31 float4 L2_0_probe_0, L2_0_probe_1, L2_0_probe_2, L2_0_probe_3; 32 float4 L2_1_probe_0, L2_1_probe_1, L2_1_probe_2, L2_1_probe_3; 33 float4 L2_2_probe_0, L2_2_probe_1, L2_2_probe_2, L2_2_probe_3; 34 float4 L2_3_probe_0, L2_3_probe_1, L2_3_probe_2, L2_3_probe_3; 35 ExtractByte(_ScratchBuffer.Load4(offsetL2_0), L2_0_probe_0, L2_0_probe_1, L2_0_probe_2, L2_0_probe_3); 36 ExtractByte(_ScratchBuffer.Load4(offsetL2_1), L2_1_probe_0, L2_1_probe_1, L2_1_probe_2, L2_1_probe_3); 37 ExtractByte(_ScratchBuffer.Load4(offsetL2_2), L2_2_probe_0, L2_2_probe_1, L2_2_probe_2, L2_2_probe_3); 38 ExtractByte(_ScratchBuffer.Load4(offsetL2_3), L2_3_probe_0, L2_3_probe_1, L2_3_probe_2, L2_3_probe_3); 39 40 APVResourcesRW output; 41 LOAD_APV_RES_L2(output, _Out); 42 43 uint3 baseProbe; 44 uint3 loc; 45 uint3 probe1Offset; 46 uint3 probe2Offset; 47 uint3 probe3Offset; 48 getProbeLocationAndOffsets(chunkIndex, chunkProbeIndex, baseProbe, loc, probe1Offset, probe2Offset, probe3Offset); 49 50 51 _Out_L2_0[loc] = L2_0_probe_0; 52 _Out_L2_0[loc + probe1Offset] = L2_0_probe_1; 53 _Out_L2_0[loc + probe2Offset] = L2_0_probe_2; 54 _Out_L2_0[loc + probe3Offset] = L2_0_probe_3; 55 56 _Out_L2_1[loc] = L2_1_probe_0; 57 _Out_L2_1[loc + probe1Offset] = L2_1_probe_1; 58 _Out_L2_1[loc + probe2Offset] = L2_1_probe_2; 59 _Out_L2_1[loc + probe3Offset] = L2_1_probe_3; 60 61 _Out_L2_2[loc] = L2_2_probe_0; 62 _Out_L2_2[loc + probe1Offset] = L2_2_probe_1; 63 _Out_L2_2[loc + probe2Offset] = L2_2_probe_2; 64 _Out_L2_2[loc + probe3Offset] = L2_2_probe_3; 65 66 _Out_L2_3[loc] = L2_3_probe_0; 67 _Out_L2_3[loc + probe1Offset] = L2_3_probe_1; 68 _Out_L2_3[loc + probe2Offset] = L2_3_probe_2; 69 _Out_L2_3[loc + probe3Offset] = L2_3_probe_3; 70}