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
801 B39 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target spirv
2// CHECK: OpEntryPoint
3
4__generic <Scalar : __BuiltinFloatingPointType, int Mode>
5struct Spectrum
6{
7	static const int Samples = Mode & 0xFF;
8	typealias VecT = vector<Scalar, Samples>;
9	VecT data;
10	
11	static const bool IsRGB = (Mode & 0x100) != 0;
12
13	__generic <Float : __BuiltinFloatingPointType>
14	__init(vector<Float, Samples> v)
15	{
16		this.data = VecT(v);
17	}
18
19	static This MakeFromRGB<Float : __BuiltinFloatingPointType>(vector<Float, 3> rgb)
20	{
21		if(IsRGB)
22		{
23			return (Spectrum<Scalar, 0x103>(rgb) as This).value;
24		}
25		else
26		{
27			return {};
28		}
29	}
30}
31
32static const int DefaultMode = 0x103;
33typealias Spec = Spectrum<float, DefaultMode>;
34
35[shader("vertex")]
36Spec main(float3 vertex_color : COLOR0) : COLOR0
37{
38	return Spec::MakeFromRGB(vertex_color);
39}