yum-mirror/slang

Making it easier to work with shaders

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

Alexey PanteleevSupport for querying which parameters are used in emitted code (#2239)69cb6e8f3

master
1.8 KiB104 linesraw
1// parameter-block-explicit-space.slang
2
3//TEST:REFLECTION:-D__SLANG__ -stage fragment -entry main -profile sm_5_1 -target hlsl -no-codegen
4//TEST:COMPARE_HLSL:-stage fragment -entry main -profile sm_5_1
5
6#ifdef __SLANG__
7struct A
8{
9    float4          au;
10    Texture2D       at1;
11    Texture2D       at2;
12    SamplerState    as;
13}
14
15struct X
16{
17    float4 xu;    
18}
19
20struct B
21{
22    float4              bu;
23    Texture2D           bt;
24    SamplerState        bs;
25
26    // TODO: This line leads to a crash
27//    ConstantBuffer<X>   bx;
28}
29
30
31
32[[vk::binding(0,2)]]
33ParameterBlock<A> a : register(space2);
34
35[[vk::binding(0,3)]]
36ParameterBlock<B> b : register(space3);
37
38float4 use(float4 val) { return val; }
39float4 use(Texture2D t, SamplerState s)
40{
41    return t.Sample(s, 0.0);
42}
43
44float4 main() : SV_Target
45{
46    return use(a.au)
47        + use(a.at1, a.as)
48        + use(a.at2, a.as)
49        + use(b.bu)
50        + use(b.bt, b.bs)
51        // + use(b.bx.xu)
52        ;
53}
54
55#else
56
57#define A A_0
58#define a a_0
59#define au au_0
60#define at1 a_at1_0
61#define at2 a_at2_0
62#define as a_as_0
63
64#define B B_0
65#define b b_0
66#define bu bu_0
67#define bt b_bt_0
68#define bs b_bs_0
69
70struct A
71{
72    float4 au;
73};
74cbuffer a            : register(b0, space2)
75{ A a; }
76Texture2D       at1  : register(t0, space2);
77Texture2D       at2  : register(t1, space2);
78SamplerState    as  : register(s0, space2);
79
80struct B
81{
82    float4      bu;
83};
84cbuffer b           : register(b0, space3)
85{ B b; }
86Texture2D       bt  : register(t0, space3);
87SamplerState    bs  : register(s0, space3);
88
89float4 use(float4 val) { return val; }
90float4 use(Texture2D t, SamplerState s)
91{
92    return t.Sample(s, 0.0);
93}
94
95float4 main() : SV_TARGET
96{
97    return use(a.au)
98        + use(at1, as)
99        + use(at2, as)
100        + use(b.bu)
101        + use(bt, bs);
102}
103
104#endif