yum-mirror/slang

Making it easier to work with shaders

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

Sami Kiminki (NVIDIA)8503 wgsl depth texture (#8645)5c672cef1

master
5.7 KiB159 linesraw
1//TEST:SIMPLE(filecheck=WGSL): -stage fragment -entry fragMain -target wgsl
2
3// In WGSL, `textureSample` and other variants work only for f32 type.
4// But textureLoad works for i32, u32 and f32.
5
6//TEST_INPUT: ubuffer(data=[0], stride=4):out,name outputBuffer
7RWStructuredBuffer<int> outputBuffer;
8
9// f32 types
10
11//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_f32v3
12//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_f32v3
13//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_f32v3
14//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_f32v3
15//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_f32v3
16Texture1D<float3>      t1D_f32v3;
17Texture2D<float3>      t2D_f32v3;
18Texture3D<float3>      t3D_f32v3;
19Texture2DMS<float3>    t2DMS_f32v3;
20Texture2DArray<float3> t2DArray_f32v3;
21
22//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_f32v4
23//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_f32v4
24//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_f32v4
25//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_f32v4
26//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_f32v4
27Texture1D<float4>      t1D_f32v4;
28Texture2D<float4>      t2D_f32v4;
29Texture3D<float4>      t3D_f32v4;
30Texture2DMS<float4>    t2DMS_f32v4;
31Texture2DArray<float4> t2DArray_f32v4;
32
33// i32 types
34
35//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_i32v3
36//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_i32v3
37//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_i32v3
38//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_i32v3
39//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_i32v3
40Texture1D<int3>      t1D_i32v3;
41Texture2D<int3>      t2D_i32v3;
42Texture3D<int3>      t3D_i32v3;
43Texture2DMS<int3>    t2DMS_i32v3;
44Texture2DArray<int3> t2DArray_i32v3;
45
46//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_i32v4
47//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_i32v4
48//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_i32v4
49//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_i32v4
50//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_i32v4
51Texture1D<int4>      t1D_i32v4;
52Texture2D<int4>      t2D_i32v4;
53Texture3D<int4>      t3D_i32v4;
54Texture2DMS<int4>    t2DMS_i32v4;
55Texture2DArray<int4> t2DArray_i32v4;
56
57// u32 types
58
59//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_u32v3
60//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_u32v3
61//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_u32v3
62//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_u32v3
63//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_u32v3
64Texture1D<uint3>      t1D_u32v3;
65Texture2D<uint3>      t2D_u32v3;
66Texture3D<uint3>      t3D_u32v3;
67Texture2DMS<uint3>    t2DMS_u32v3;
68Texture2DArray<uint3> t2DArray_u32v3;
69
70//TEST_INPUT: Texture1D(size=4, content = zero):name t1D_u32v4
71//TEST_INPUT: Texture2D(size=4, content = zero):name t2D_u32v4
72//TEST_INPUT: Texture3D(size=4, content = zero):name t3D_u32v4
73//TEST_INPUT: Texture2D(size=4, content = zero):name t2DMS_u32v4
74//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name t2DArray_u32v4
75Texture1D<uint4>      t1D_u32v4;
76Texture2D<uint4>      t2D_u32v4;
77Texture3D<uint4>      t3D_u32v4;
78Texture2DMS<uint4>    t2DMS_u32v4;
79Texture2DArray<uint4> t2DArray_u32v4;
80
81// depth
82
83//TEST_INPUT: Texture2D(size=4, content = zero):name d2D
84DepthTexture2D d2D;
85//TEST_INPUT: Texture2D(size=4, content = zero):name d2DMS
86DepthTexture2DMS d2DMS;
87//TEST_INPUT: Texture2D(size=4, content = zero, arrayLength=2):name d2DArray
88DepthTexture2DArray d2DArray;
89
90
91bool TEST_textureLoad<T>(
92    Texture1D<T> t1D,
93    Texture2D<T> t2D,
94    Texture3D<T> t3D,
95    Texture2DMS<T> t2DMS,
96    Texture2DArray<T> t2DArray)
97    where T : ITexelElement, IArithmetic
98{
99    // WGSL-LABEL: TEST_textureLoad
100    typealias Tvn = T;
101
102    return true
103        // ===================
104        // T Load()
105        // https://www.w3.org/TR/WGSL/#textureload
106        // ===================
107
108        // WGSL: textureLoad({{\(*}}t1D
109        && all(Tvn(T.Element(0)) == t1D.Load(int2(0, 0)))
110
111        // WGSL: textureLoad({{\(*}}t2D
112        && all(Tvn(T.Element(0)) == t2D.Load(int3(0, 0, 0)))
113
114        // WGSL: textureLoad({{\(*}}t3D
115        && all(Tvn(T.Element(0)) == t3D.Load(int4(0, 0, 0, 0)))
116
117        // WGSL: textureLoad({{\(*}}t2DMS
118        && all(Tvn(T.Element(0)) == t2DMS.Load(int3(0, 0, 0)))
119
120        // WGSL: textureLoad({{\(*}}t2DArray
121        && all(Tvn(T.Element(0)) == t2DArray.Load(int4(0, 0, 0, 0)))
122        ;
123}
124
125bool TEST_textureLoad_depth()
126{
127    // WGSL-LABEL: TEST_textureLoad_depth
128
129    return true
130        // ===================
131        // T Load()
132        // https://www.w3.org/TR/WGSL/#textureload
133        // ===================
134
135        // WGSL: textureLoad({{\(*}}d2D
136        && all(0.f == d2D.Load(int3(0, 0, 0)))
137
138        // WGSL: textureLoad({{\(*}}d2DMS
139        && all(0.f == d2DMS.Load(int2(0, 0), 0))
140
141        // WGSL: textureLoad({{\(*}}d2DArray
142        && all(0.f == d2DArray.Load(int4(0, 0, 0, 0)))
143        ;
144}
145
146void fragMain()
147{
148    bool result = true
149        && TEST_textureLoad<float3>(t1D_f32v3, t2D_f32v3, t3D_f32v3, t2DMS_f32v3, t2DArray_f32v3)
150        && TEST_textureLoad<float4>(t1D_f32v4, t2D_f32v4, t3D_f32v4, t2DMS_f32v4, t2DArray_f32v4)
151        && TEST_textureLoad<int32_t3>(t1D_i32v3, t2D_i32v3, t3D_i32v3, t2DMS_i32v3, t2DArray_i32v3)
152        && TEST_textureLoad<int32_t4>(t1D_i32v4, t2D_i32v4, t3D_i32v4, t2DMS_i32v4, t2DArray_i32v4)
153        && TEST_textureLoad<uint32_t3>(t1D_u32v3, t2D_u32v3, t3D_u32v3, t2DMS_u32v3, t2DArray_u32v3)
154        && TEST_textureLoad<uint32_t4>(t1D_u32v4, t2D_u32v4, t3D_u32v4, t2DMS_u32v4, t2DArray_u32v4)
155        && TEST_textureLoad_depth()
156        ;
157
158    outputBuffer[0] = int(result);
159}