yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ronan`ExprLoweringVisitorBase::getDefaultVal(Type*)` use `MakeVector/MatrixFromScalar` (#8512)1300678a3

master
831 B40 linesraw
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}