yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
69cb6e8f3
master
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