yum-mirror/slang

Making it easier to work with shaders

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

Ellie HermaszewskaBump spirv-header/tools/glslang (#5834)626e81478

master
7.2 KiB253 linesraw
1//TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -emit-spirv-via-glsl -entry fragmentMain -stage fragment -DENABLE_CLAMP
2//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry fragmentMain -stage fragment -DENABLE_CLAMP
3//DISABLED_TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -entry fragmentMain -stage fragment -DENABLE_CLAMP -emit-spirv-directly
4
5//DISABLED_TEST:SIMPLE(filecheck=DXIL):-target dxil-assembly -entry fragmentMain -stage fragment
6//TEST:SIMPLE(filecheck=HLSL):-target hlsl -entry fragmentMain -stage fragment
7
8// TODO: The SPIRV test is fine locally, but seems to lead to an impossible to debug hang in CI
9
10//DISABLED_TEST:SIMPLE:-target spirv-assembly -entry fragmentMain -stage fragment -DENABLE_CLAMP
11//DISABLED_TEST:SIMPLE:-target dxil-assembly -entry fragmentMain -stage fragment
12//DISABLED_TEST:SIMPLE:-target hlsl -entry fragmentMain -stage fragment
13
14// In order to make sure that all of the data produced in each
15// query is referenced (and thus cannot be DCE'd away), we maintain
16// single accumulator that will have the bits of each query result
17// mixed into it.
18
19void accumulate(inout uint r, uint u)
20{
21    r = r ^ u;
22}
23
24void accumulate(inout uint r, bool b)
25{
26    accumulate(r, uint(b));
27}
28
29void accumulate(inout uint r, uint2 u)
30{
31    accumulate(r, u.x);
32    accumulate(r, u.y);
33}
34
35void accumulate(inout uint r, uint3 u)
36{
37    accumulate(r, u.x);
38    accumulate(r, u.y);
39    accumulate(r, u.z);
40}
41
42void accumulate_2D(inout uint r, TextureFootprint2D f)
43{
44    accumulate(r, f.anchor);
45// HLSL-DAG: NvFootprintExtractAnchorTileLoc2D
46
47    accumulate(r, f.offset);
48// HLSL-DAG: NvFootprintExtractOffset2D
49
50    accumulate(r, f.mask);
51// HLSL-DAG: NvFootprintExtractBitmask
52
53    accumulate(r, f.lod);
54// HLSL-DAG: NvFootprintExtractLOD
55
56    accumulate(r, f.granularity);
57// HLSL-DAG: NvFootprintExtractReturnGran
58
59    accumulate(r, f.isSingleLevel);
60}
61
62void accumulate_3D(inout uint r, TextureFootprint3D f)
63{
64    accumulate(r, f.anchor);
65// HLSL-DAG: NvFootprintExtractAnchorTileLoc3D
66
67    accumulate(r, f.offset);
68// HLSL-DAG: NvFootprintExtractOffset3D
69
70    accumulate(r, f.mask);
71// HLSL-DAG: NvFootprintExtractBitmask
72
73    accumulate(r, f.lod);
74// HLSL-DAG: NvFootprintExtractLOD
75
76    accumulate(r, f.granularity);
77// HLSL-DAG: NvFootprintExtractReturnGran
78
79    accumulate(r, f.isSingleLevel);
80}
81
82// SPRIV: OpExtension "SPV_NV_shader_image_footprint"
83
84void fragmentMain(
85            float                       v : VARYING,
86
87    uniform Texture2D                   texture_2D,
88// SPIRV-DAG: OpTypeImage {{.*}} 2D
89
90// HLSL-DAG: Texture2D{{.*}}register(t0)
91
92    uniform Texture3D                   texture_3D,
93// SPIRV-DAG: OpTypeImage {{.*}} 3D
94
95// HLSL-DAG: Texture3D{{.*}}register(t1)
96
97    uniform SamplerState                sampler,
98    uniform RWStructuredBuffer<uint>    outputBuffer,
99    uniform float4                      c,
100    uniform float4                      gx,
101    uniform float4                      gy,
102    uniform uint                        g,
103    uniform float                       lodBias,
104    uniform float                       lodClamp,
105    uniform float                       lod)
106{
107    uint index = uint(v);
108    uint r = 0;
109
110    TextureFootprint2D.Granularity granularity = g;
111
112#ifdef ENABLE_CLAMP
113#define CLAMP(ARG) ARG
114#else
115#define CLAMP(ARG) /* empty */
116#endif
117
118#define TEST_COMMON(ND, COARSE_OR_FINE) \
119        accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE            (granularity, sampler, coords                   ))  ;\
120        accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Bias      (granularity, sampler, coords, lodBias          ))  ;\
121CLAMP(  accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Clamp     (granularity, sampler, coords, lodClamp         ))) ;\
122CLAMP(  accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##BiasClamp (granularity, sampler, coords, lodBias, lodClamp))) ;\
123        accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Level     (granularity, sampler, coords, lod              ))  ;\
124/* end */
125
126#define TEST_GRAD(ND, COARSE_OR_FINE) \
127        accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Grad      (granularity, sampler, coords, dx, dy           ))  ;\
128CLAMP(  accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##GradClamp (granularity, sampler, coords, dx, dy, lodClamp ))) ;\
129/* end */
130
131
132#define TEST_2D(COARSE_OR_FINE) \
133    TEST_COMMON(_2D, COARSE_OR_FINE) \
134    TEST_GRAD(_2D, COARSE_OR_FINE) \
135    /* end */
136
137#define TEST_3D(COARSE_OR_FINE) \
138    TEST_COMMON(_3D, COARSE_OR_FINE) \
139    /* end */
140
141// SPIRV-DAG: [[TRUE:%[a-zA-Z0-9_]+]] = OpConstantTrue
142// SPIRV-DAG: [[FALSE:%[a-zA-Z0-9_]+]] = OpConstantFalse
143
144    {
145        let coords = c.xy;
146        let dx = gx.xy;
147        let dy = gy.xy;
148
149        TEST_2D(Coarse);
150
151// SPIRV: OpImageSampleFootprintNV
152// SPIRV-SAME: [[TRUE]]
153// HLSL-DAG: NvFootprintCoarse{{.*}}NV_EXTN_TEXTURE_2D
154
155// SPIRV: OpImageSampleFootprintNV
156// SPIRV-SAME: [[TRUE]] Bias
157// HLSL-DAG: NvFootprintCoarseBias{{.*}}NV_EXTN_TEXTURE_2D
158
159// SPIRV: OpImageSampleFootprintNV
160// SPIRV-SAME: [[TRUE]] MinLod
161
162// SPIRV: OpImageSampleFootprintNV
163// SPIRV-SAME: [[TRUE]] Bias|MinLod
164
165// SPIRV: OpImageSampleFootprintNV
166// SPIRV-SAME: [[TRUE]] Lod
167// HLSL-DAG: NvFootprintCoarseLevel{{.*}}NV_EXTN_TEXTURE_2D
168
169// SPIRV: OpImageSampleFootprintNV
170// SPIRV-SAME: [[TRUE]] Grad
171// HLSL-DAG: NvFootprintCoarseGrad{{.*}}NV_EXTN_TEXTURE_2D
172
173// SPIRV: OpImageSampleFootprintNV
174// SPIRV-SAME: [[TRUE]] Grad|MinLod
175
176        TEST_2D(Fine);
177
178// SPIRV: OpImageSampleFootprintNV
179// SPIRV-SAME: [[FALSE]]
180// HLSL-DAG: NvFootprintFine{{.*}}NV_EXTN_TEXTURE_2D
181
182// SPIRV: OpImageSampleFootprintNV
183// SPIRV-SAME: [[FALSE]] Bias
184// HLSL-DAG: NvFootprintFineBias{{.*}}NV_EXTN_TEXTURE_2D
185
186// SPIRV: OpImageSampleFootprintNV
187// SPIRV-SAME: [[FALSE]] MinLod
188
189// SPIRV: OpImageSampleFootprintNV
190// SPIRV-SAME: [[FALSE]] Bias|MinLod
191
192// SPIRV: OpImageSampleFootprintNV
193// SPIRV-SAME: [[FALSE]] Lod
194// HLSL-DAG: NvFootprintFineLevel{{.*}}NV_EXTN_TEXTURE_2D
195
196// SPIRV: OpImageSampleFootprintNV
197// SPIRV-SAME: [[FALSE]] Grad
198// HLSL-DAG: NvFootprintFineGrad{{.*}}NV_EXTN_TEXTURE_2D
199
200// SPIRV: OpImageSampleFootprintNV
201// SPIRV-SAME: [[FALSE]] Grad|MinLod
202
203    }
204
205    {
206        let coords = c.xyz;
207        let dx = gx.xyz;
208        let dy = gy.xyz;
209
210        TEST_3D(Coarse);
211
212// SPIRV: OpImageSampleFootprintNV
213// SPIRV-SAME: [[TRUE]]
214// HLSL-DAG: NvFootprintCoarse{{.*}}NV_EXTN_TEXTURE_3D
215
216// SPIRV: OpImageSampleFootprintNV
217// SPIRV-SAME: [[TRUE]] Bias
218// HLSL-DAG: NvFootprintCoarseBias{{.*}}NV_EXTN_TEXTURE_3D
219
220// SPIRV: OpImageSampleFootprintNV
221// SPIRV-SAME: [[TRUE]] MinLod
222
223// SPIRV: OpImageSampleFootprintNV
224// SPIRV-SAME: [[TRUE]] Bias|MinLod
225
226// SPIRV: OpImageSampleFootprintNV
227// SPIRV-SAME: [[TRUE]] Lod
228// HLSL-DAG: NvFootprintCoarseLevel{{.*}}NV_EXTN_TEXTURE_3D
229
230        TEST_3D(Fine);
231
232// SPIRV: OpImageSampleFootprintNV
233// SPIRV-SAME: [[FALSE]]
234// HLSL-DAG: NvFootprintFine{{.*}}NV_EXTN_TEXTURE_3D
235
236// SPIRV: OpImageSampleFootprintNV
237// SPIRV-SAME: [[FALSE]] Bias
238// HLSL-DAG: NvFootprintFineBias{{.*}}NV_EXTN_TEXTURE_3D
239
240// SPIRV: OpImageSampleFootprintNV
241// SPIRV-SAME: [[FALSE]] MinLod
242
243// SPIRV: OpImageSampleFootprintNV
244// SPIRV-SAME: [[FALSE]] Bias|MinLod
245
246// SPIRV: OpImageSampleFootprintNV
247// SPIRV-SAME: [[FALSE]] Lod
248// HLSL-DAG: NvFootprintFineLevel{{.*}}NV_EXTN_TEXTURE_3D
249
250    }
251
252    outputBuffer[index] = r;
253}