yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
1300678a3
master
1//TEST:INTERPRET(filecheck=ICHECK): 2 3__generic <Scalar : __BuiltinFloatingPointType, int Mode> 4struct Spectrum 5{ 6 static const int Samples = Mode & 0xFF; 7 typealias VecT = vector<Scalar, Samples>; 8 VecT data; 9 10 static const bool IsRGB = (Mode & 0x100) != 0; 11 12 __generic <Float : __BuiltinFloatingPointType> 13 __init(vector<Float, Samples> v) 14 { 15 this.data = VecT(v); 16 } 17 18 static This MakeFromRGB<Float : __BuiltinFloatingPointType>(vector<Float, 3> rgb) 19 { 20 if(IsRGB) 21 { 22 return (Spectrum<Scalar, 0x103>(rgb) as This).value; 23 } 24 else 25 { 26 return {}; 27 } 28 } 29} 30 31static const int DefaultMode = 0x103; 32typealias Spec = Spectrum<float, DefaultMode>; 33 34void main() 35{ 36 float3 color = {1, 2, 3}; 37 let spec = Spec::MakeFromRGB(color); 38 // ICHECK: (1, 2, 3) 39 printf("(%.0f, %.0f, %.0f)", spec.data[0], spec.data[1], spec.data[2]); 40}