yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
d5d39dda2
master
1//TEST:SIMPLE(filecheck=CHECK): -target glsl -entry computeMain -stage compute 2// CHECK: main( 3struct DiffMaterialData : IDifferentiable 4{ 5 static const uint kMaterialParamCount = 20; 6 7 // Material parameters. 8 float data[kMaterialParamCount]; 9 10 [Differentiable] 11 __init() 12 { 13 [ForceUnroll] 14 for (uint i = 0; i < kMaterialParamCount; i++) 15 data[i] = 0.f; 16 } 17 18 [Differentiable] 19 float read(inout uint offset) { return data[offset++]; } 20 21 [Differentiable] 22 void read<let N : int>(out vector<float, N> value, inout uint offset) 23 { 24 [ForceUnroll] 25 for (uint i = 0; i < N; i++) 26 value[i] = read(offset); 27 } 28 29 [Differentiable] 30 vector<float, N> read<let N : int>(inout uint offset) 31 { 32 vector<float, N> value; 33 this.read(value, offset); 34 return value; 35 } 36 37 [mutating] 38 [Differentiable] 39 void write(float value, inout uint offset) { data[offset++] = value; } 40 41 [mutating] 42 [Differentiable] 43 void write<let N : int>(vector<float, N> value, inout uint offset) 44 { 45 [ForceUnroll] 46 for (uint i = 0; i < N; i++) 47 this.write(value[i], offset); 48 } 49}; 50 51RWStructuredBuffer<float3> outputBuffer; 52 53[numthreads(1,1,1)] 54void computeMain() 55{ 56 DiffMaterialData diffData; 57 uint offset = 0; 58 outputBuffer[0] = diffData.read<3>(offset); 59}