Skip to content
This repository was archived by the owner on Jan 29, 2025. It is now read-only.

Commit d22b70a

Browse files
committed
BindingArrays - tests
1 parent 6eddafa commit d22b70a

File tree

8 files changed

+1159
-0
lines changed

8 files changed

+1159
-0
lines changed

tests/in/binding-arrays.param.ron

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
(
2+
god_mode: true,
3+
hlsl: (
4+
shader_model: V5_1,
5+
binding_map: {
6+
(group: 0, binding: 0): (space: 0, register: 0, binding_array_size: Some(10)),
7+
(group: 0, binding: 1): (space: 1, register: 0),
8+
(group: 0, binding: 2): (space: 2, register: 0),
9+
(group: 0, binding: 3): (space: 3, register: 0),
10+
(group: 0, binding: 4): (space: 4, register: 0),
11+
(group: 0, binding: 5): (space: 5, register: 0),
12+
(group: 0, binding: 6): (space: 6, register: 0),
13+
(group: 0, binding: 7): (space: 7, register: 0),
14+
(group: 0, binding: 8): (space: 8, register: 0),
15+
},
16+
fake_missing_bindings: true,
17+
special_constants_binding: None,
18+
),
19+
msl: (
20+
lang_version: (2, 0),
21+
per_stage_map: (
22+
fs: (
23+
resources: {
24+
(group: 0, binding: 0): (texture: Some(0), binding_array_size: Some(10), mutable: false),
25+
},
26+
sizes_buffer: None,
27+
)
28+
),
29+
inline_samplers: [],
30+
spirv_cross_compatibility: false,
31+
fake_missing_bindings: true,
32+
),
33+
spv: (
34+
version: (1, 1),
35+
binding_map: {
36+
(group: 0, binding: 0): (binding_array_size: Some(10)),
37+
},
38+
)
39+
)

tests/in/binding-arrays.wgsl

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
struct UniformIndex {
2+
index: u32
3+
};
4+
5+
@group(0) @binding(0)
6+
var texture_array_unbounded: binding_array<texture_2d<f32>>;
7+
@group(0) @binding(1)
8+
var texture_array_bounded: binding_array<texture_2d<f32>, 5>;
9+
@group(0) @binding(2)
10+
var texture_array_2darray: binding_array<texture_2d_array<f32>, 5>;
11+
@group(0) @binding(3)
12+
var texture_array_multisampled: binding_array<texture_multisampled_2d<f32>, 5>;
13+
@group(0) @binding(4)
14+
var texture_array_depth: binding_array<texture_depth_2d, 5>;
15+
@group(0) @binding(5)
16+
var texture_array_storage: binding_array<texture_storage_2d<rgba32float, write>, 5>;
17+
@group(0) @binding(6)
18+
var samp: binding_array<sampler, 5>;
19+
@group(0) @binding(7)
20+
var samp_comp: binding_array<sampler_comparison, 5>;
21+
@group(0) @binding(8)
22+
var<uniform> uni: UniformIndex;
23+
24+
struct FragmentIn {
25+
@location(0) index: u32,
26+
};
27+
28+
@fragment
29+
fn main(in: FragmentIn) -> @location(0) vec4<f32> {
30+
let uniform_index = uni.index;
31+
let non_uniform_index = in.index;
32+
33+
var i1 = 0;
34+
var i2 = vec2<i32>(0);
35+
var v1 = 0.0;
36+
var v4 = vec4<f32>(0.0);
37+
38+
// This example is arranged in the order of the texture definitions in the wgsl spec
39+
//
40+
// The first function uses texture_array_unbounded, the rest use texture_array_bounded to make sure
41+
// they both show up in the output. Functions that need depth use texture_array_2darray.
42+
//
43+
// We only test 2D f32 textures here as the machinery for binding indexing doesn't care about
44+
// texture format or texture dimension.
45+
46+
let uv = vec2<f32>(0.0);
47+
let pix = vec2<i32>(0);
48+
49+
i2 += textureDimensions(texture_array_unbounded[0]);
50+
i2 += textureDimensions(texture_array_unbounded[uniform_index]);
51+
i2 += textureDimensions(texture_array_unbounded[non_uniform_index]);
52+
53+
v4 += textureGather(0, texture_array_bounded[0], samp[0], uv);
54+
v4 += textureGather(0, texture_array_bounded[uniform_index], samp[uniform_index], uv);
55+
v4 += textureGather(0, texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv);
56+
57+
v4 += textureGatherCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
58+
v4 += textureGatherCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
59+
v4 += textureGatherCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
60+
61+
v4 += textureLoad(texture_array_unbounded[0], pix, 0);
62+
v4 += textureLoad(texture_array_unbounded[uniform_index], pix, 0);
63+
v4 += textureLoad(texture_array_unbounded[non_uniform_index], pix, 0);
64+
65+
i1 += textureNumLayers(texture_array_2darray[0]);
66+
i1 += textureNumLayers(texture_array_2darray[uniform_index]);
67+
i1 += textureNumLayers(texture_array_2darray[non_uniform_index]);
68+
69+
i1 += textureNumLevels(texture_array_bounded[0]);
70+
i1 += textureNumLevels(texture_array_bounded[uniform_index]);
71+
i1 += textureNumLevels(texture_array_bounded[non_uniform_index]);
72+
73+
i1 += textureNumSamples(texture_array_multisampled[0]);
74+
i1 += textureNumSamples(texture_array_multisampled[uniform_index]);
75+
i1 += textureNumSamples(texture_array_multisampled[non_uniform_index]);
76+
77+
v4 += textureSample(texture_array_bounded[0], samp[0], uv);
78+
v4 += textureSample(texture_array_bounded[uniform_index], samp[uniform_index], uv);
79+
v4 += textureSample(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv);
80+
81+
v4 += textureSampleBias(texture_array_bounded[0], samp[0], uv, 0.0);
82+
v4 += textureSampleBias(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
83+
v4 += textureSampleBias(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
84+
85+
v1 += textureSampleCompare(texture_array_depth[0], samp_comp[0], uv, 0.0);
86+
v1 += textureSampleCompare(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
87+
v1 += textureSampleCompare(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
88+
89+
v1 += textureSampleCompareLevel(texture_array_depth[0], samp_comp[0], uv, 0.0);
90+
v1 += textureSampleCompareLevel(texture_array_depth[uniform_index], samp_comp[uniform_index], uv, 0.0);
91+
v1 += textureSampleCompareLevel(texture_array_depth[non_uniform_index], samp_comp[non_uniform_index], uv, 0.0);
92+
93+
v4 += textureSampleGrad(texture_array_bounded[0], samp[0], uv, uv, uv);
94+
v4 += textureSampleGrad(texture_array_bounded[uniform_index], samp[uniform_index], uv, uv, uv);
95+
v4 += textureSampleGrad(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, uv, uv);
96+
97+
v4 += textureSampleLevel(texture_array_bounded[0], samp[0], uv, 0.0);
98+
v4 += textureSampleLevel(texture_array_bounded[uniform_index], samp[uniform_index], uv, 0.0);
99+
v4 += textureSampleLevel(texture_array_bounded[non_uniform_index], samp[non_uniform_index], uv, 0.0);
100+
101+
textureStore(texture_array_storage[0], pix, v4);
102+
textureStore(texture_array_storage[uniform_index], pix, v4);
103+
textureStore(texture_array_storage[non_uniform_index], pix, v4);
104+
105+
let v2 = vec2<f32>(i2 + vec2<i32>(i1));
106+
107+
return v4 + vec4<f32>(v2.x, v2.y, v2.x, v2.y) + v1;
108+
}

tests/out/hlsl/binding-arrays.hlsl

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
2+
struct UniformIndex {
3+
uint index;
4+
};
5+
6+
struct FragmentIn {
7+
nointerpolation uint index : LOC0;
8+
};
9+
10+
Texture2D<float4> texture_array_unbounded[10] : register(t0);
11+
Texture2D<float4> texture_array_bounded[5] : register(t0, space1);
12+
Texture2DArray<float4> texture_array_2darray[5] : register(t0, space2);
13+
Texture2DMS<float4> texture_array_multisampled[5] : register(t0, space3);
14+
Texture2D<float> texture_array_depth[5] : register(t0, space4);
15+
RWTexture2D<float4> texture_array_storage[5] : register(u0, space5);
16+
SamplerState samp[5] : register(s0, space6);
17+
SamplerComparisonState samp_comp[5] : register(s0, space7);
18+
cbuffer uni : register(b0, space8) { UniformIndex uni; }
19+
20+
struct FragmentInput_main {
21+
nointerpolation uint index : LOC0;
22+
};
23+
24+
int2 NagaDimensions2D(Texture2D<float4> tex)
25+
{
26+
uint4 ret;
27+
tex.GetDimensions(0, ret.x, ret.y, ret.z);
28+
return ret.xy;
29+
}
30+
31+
int NagaNumLayers2DArray(Texture2DArray<float4> tex)
32+
{
33+
uint4 ret;
34+
tex.GetDimensions(0, ret.x, ret.y, ret.z, ret.w);
35+
return ret.w;
36+
}
37+
38+
int NagaNumLevels2D(Texture2D<float4> tex)
39+
{
40+
uint4 ret;
41+
tex.GetDimensions(0, ret.x, ret.y, ret.z);
42+
return ret.z;
43+
}
44+
45+
int NagaMSNumSamples2D(Texture2DMS<float4> tex)
46+
{
47+
uint4 ret;
48+
tex.GetDimensions(ret.x, ret.y, ret.z);
49+
return ret.z;
50+
}
51+
52+
float4 main(FragmentInput_main fragmentinput_main) : SV_Target0
53+
{
54+
FragmentIn in_ = { fragmentinput_main.index };
55+
int i1_ = 0;
56+
int2 i2_ = (int2)0;
57+
float v1_ = 0.0;
58+
float4 v4_ = (float4)0;
59+
60+
uint uniform_index = uni.index;
61+
uint non_uniform_index = in_.index;
62+
i2_ = (0).xx;
63+
v4_ = (0.0).xxxx;
64+
float2 uv = (0.0).xx;
65+
int2 pix = (0).xx;
66+
int2 _expr27 = i2_;
67+
i2_ = (_expr27 + NagaDimensions2D(texture_array_unbounded[0]));
68+
int2 _expr32 = i2_;
69+
i2_ = (_expr32 + NagaDimensions2D(texture_array_unbounded[uniform_index]));
70+
int2 _expr36 = i2_;
71+
i2_ = (_expr36 + NagaDimensions2D(texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)]));
72+
float4 _expr40 = v4_;
73+
float4 _expr45 = texture_array_bounded[0].Gather(samp[0], uv);
74+
v4_ = (_expr40 + _expr45);
75+
float4 _expr47 = v4_;
76+
float4 _expr50 = texture_array_bounded[uniform_index].Gather(samp[uniform_index], uv);
77+
v4_ = (_expr47 + _expr50);
78+
float4 _expr52 = v4_;
79+
float4 _expr55 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].Gather(samp[NonUniformResourceIndex(non_uniform_index)], uv);
80+
v4_ = (_expr52 + _expr55);
81+
float4 _expr57 = v4_;
82+
float4 _expr63 = texture_array_depth[0].GatherCmp(samp_comp[0], uv, 0.0);
83+
v4_ = (_expr57 + _expr63);
84+
float4 _expr65 = v4_;
85+
float4 _expr69 = texture_array_depth[uniform_index].GatherCmp(samp_comp[uniform_index], uv, 0.0);
86+
v4_ = (_expr65 + _expr69);
87+
float4 _expr71 = v4_;
88+
float4 _expr75 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].GatherCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
89+
v4_ = (_expr71 + _expr75);
90+
float4 _expr77 = v4_;
91+
float4 _expr81 = texture_array_unbounded[0].Load(int3(pix, 0));
92+
v4_ = (_expr77 + _expr81);
93+
float4 _expr83 = v4_;
94+
float4 _expr86 = texture_array_unbounded[uniform_index].Load(int3(pix, 0));
95+
v4_ = (_expr83 + _expr86);
96+
float4 _expr88 = v4_;
97+
float4 _expr91 = texture_array_unbounded[NonUniformResourceIndex(non_uniform_index)].Load(int3(pix, 0));
98+
v4_ = (_expr88 + _expr91);
99+
int _expr93 = i1_;
100+
i1_ = (_expr93 + NagaNumLayers2DArray(texture_array_2darray[0]));
101+
int _expr98 = i1_;
102+
i1_ = (_expr98 + NagaNumLayers2DArray(texture_array_2darray[uniform_index]));
103+
int _expr102 = i1_;
104+
i1_ = (_expr102 + NagaNumLayers2DArray(texture_array_2darray[NonUniformResourceIndex(non_uniform_index)]));
105+
int _expr106 = i1_;
106+
i1_ = (_expr106 + NagaNumLevels2D(texture_array_bounded[0]));
107+
int _expr111 = i1_;
108+
i1_ = (_expr111 + NagaNumLevels2D(texture_array_bounded[uniform_index]));
109+
int _expr115 = i1_;
110+
i1_ = (_expr115 + NagaNumLevels2D(texture_array_bounded[NonUniformResourceIndex(non_uniform_index)]));
111+
int _expr119 = i1_;
112+
i1_ = (_expr119 + NagaMSNumSamples2D(texture_array_multisampled[0]));
113+
int _expr124 = i1_;
114+
i1_ = (_expr124 + NagaMSNumSamples2D(texture_array_multisampled[uniform_index]));
115+
int _expr128 = i1_;
116+
i1_ = (_expr128 + NagaMSNumSamples2D(texture_array_multisampled[NonUniformResourceIndex(non_uniform_index)]));
117+
float4 _expr132 = v4_;
118+
float4 _expr137 = texture_array_bounded[0].Sample(samp[0], uv);
119+
v4_ = (_expr132 + _expr137);
120+
float4 _expr139 = v4_;
121+
float4 _expr142 = texture_array_bounded[uniform_index].Sample(samp[uniform_index], uv);
122+
v4_ = (_expr139 + _expr142);
123+
float4 _expr144 = v4_;
124+
float4 _expr147 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].Sample(samp[NonUniformResourceIndex(non_uniform_index)], uv);
125+
v4_ = (_expr144 + _expr147);
126+
float4 _expr149 = v4_;
127+
float4 _expr155 = texture_array_bounded[0].SampleBias(samp[0], uv, 0.0);
128+
v4_ = (_expr149 + _expr155);
129+
float4 _expr157 = v4_;
130+
float4 _expr161 = texture_array_bounded[uniform_index].SampleBias(samp[uniform_index], uv, 0.0);
131+
v4_ = (_expr157 + _expr161);
132+
float4 _expr163 = v4_;
133+
float4 _expr167 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleBias(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
134+
v4_ = (_expr163 + _expr167);
135+
float _expr169 = v1_;
136+
float _expr175 = texture_array_depth[0].SampleCmp(samp_comp[0], uv, 0.0);
137+
v1_ = (_expr169 + _expr175);
138+
float _expr177 = v1_;
139+
float _expr181 = texture_array_depth[uniform_index].SampleCmp(samp_comp[uniform_index], uv, 0.0);
140+
v1_ = (_expr177 + _expr181);
141+
float _expr183 = v1_;
142+
float _expr187 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmp(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
143+
v1_ = (_expr183 + _expr187);
144+
float _expr189 = v1_;
145+
float _expr195 = texture_array_depth[0].SampleCmpLevelZero(samp_comp[0], uv, 0.0);
146+
v1_ = (_expr189 + _expr195);
147+
float _expr197 = v1_;
148+
float _expr201 = texture_array_depth[uniform_index].SampleCmpLevelZero(samp_comp[uniform_index], uv, 0.0);
149+
v1_ = (_expr197 + _expr201);
150+
float _expr203 = v1_;
151+
float _expr207 = texture_array_depth[NonUniformResourceIndex(non_uniform_index)].SampleCmpLevelZero(samp_comp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
152+
v1_ = (_expr203 + _expr207);
153+
float4 _expr209 = v4_;
154+
float4 _expr214 = texture_array_bounded[0].SampleGrad(samp[0], uv, uv, uv);
155+
v4_ = (_expr209 + _expr214);
156+
float4 _expr216 = v4_;
157+
float4 _expr219 = texture_array_bounded[uniform_index].SampleGrad(samp[uniform_index], uv, uv, uv);
158+
v4_ = (_expr216 + _expr219);
159+
float4 _expr221 = v4_;
160+
float4 _expr224 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleGrad(samp[NonUniformResourceIndex(non_uniform_index)], uv, uv, uv);
161+
v4_ = (_expr221 + _expr224);
162+
float4 _expr226 = v4_;
163+
float4 _expr232 = texture_array_bounded[0].SampleLevel(samp[0], uv, 0.0);
164+
v4_ = (_expr226 + _expr232);
165+
float4 _expr234 = v4_;
166+
float4 _expr238 = texture_array_bounded[uniform_index].SampleLevel(samp[uniform_index], uv, 0.0);
167+
v4_ = (_expr234 + _expr238);
168+
float4 _expr240 = v4_;
169+
float4 _expr244 = texture_array_bounded[NonUniformResourceIndex(non_uniform_index)].SampleLevel(samp[NonUniformResourceIndex(non_uniform_index)], uv, 0.0);
170+
v4_ = (_expr240 + _expr244);
171+
float4 _expr248 = v4_;
172+
texture_array_storage[0][pix] = _expr248;
173+
float4 _expr250 = v4_;
174+
texture_array_storage[uniform_index][pix] = _expr250;
175+
float4 _expr252 = v4_;
176+
texture_array_storage[NonUniformResourceIndex(non_uniform_index)][pix] = _expr252;
177+
int2 _expr253 = i2_;
178+
int _expr254 = i1_;
179+
float2 v2_ = float2((_expr253 + (_expr254).xx));
180+
float4 _expr258 = v4_;
181+
float _expr265 = v1_;
182+
return ((_expr258 + float4(v2_.x, v2_.y, v2_.x, v2_.y)) + (_expr265).xxxx);
183+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
vertex=()
2+
fragment=(main:ps_5_1 )
3+
compute=()

0 commit comments

Comments
 (0)