Skip to content

Commit 28dc70e

Browse files
committed
[naga] Adjust RayQuery statements in override processing.
1 parent 86b056d commit 28dc70e

8 files changed

+702
-2
lines changed

naga/src/back/pipeline_constants.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ fn adjust_stmt(new_pos: &[Handle<Expression>], stmt: &mut Statement) {
633633
Statement::Call {
634634
ref mut arguments,
635635
ref mut result,
636-
..
636+
function: _,
637637
} => {
638638
for argument in arguments.iter_mut() {
639639
adjust(argument);
@@ -642,8 +642,24 @@ fn adjust_stmt(new_pos: &[Handle<Expression>], stmt: &mut Statement) {
642642
adjust(e);
643643
}
644644
}
645-
Statement::RayQuery { ref mut query, .. } => {
645+
Statement::RayQuery {
646+
ref mut query,
647+
ref mut fun,
648+
} => {
646649
adjust(query);
650+
match *fun {
651+
crate::RayQueryFunction::Initialize {
652+
ref mut acceleration_structure,
653+
ref mut descriptor,
654+
} => {
655+
adjust(acceleration_structure);
656+
adjust(descriptor);
657+
}
658+
crate::RayQueryFunction::Proceed { ref mut result } => {
659+
adjust(result);
660+
}
661+
crate::RayQueryFunction::Terminate => {}
662+
}
647663
}
648664
Statement::Break | Statement::Continue | Statement::Kill | Statement::Barrier(_) => {}
649665
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
(
2+
god_mode: true,
3+
spv: (
4+
version: (1, 4),
5+
separate_entry_points: true,
6+
),
7+
msl: (
8+
lang_version: (2, 4),
9+
spirv_cross_compatibility: false,
10+
fake_missing_bindings: true,
11+
zero_initialize_workgroup_memory: false,
12+
per_entry_point_map: {},
13+
inline_samplers: [],
14+
),
15+
pipeline_constants: {
16+
"o": 2.0
17+
}
18+
)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
override o: f32;
2+
3+
@group(0) @binding(0)
4+
var acc_struct: acceleration_structure;
5+
6+
@compute @workgroup_size(1)
7+
fn main() {
8+
var rq: ray_query;
9+
10+
let desc = RayDesc(
11+
RAY_FLAG_TERMINATE_ON_FIRST_HIT,
12+
0xFFu,
13+
o * 17.0,
14+
o * 19.0,
15+
vec3<f32>(o * 23.0),
16+
vec3<f32>(o * 29.0, o * 31.0, o * 37.0),
17+
);
18+
rayQueryInitialize(&rq, acc_struct, desc);
19+
20+
while (rayQueryProceed(&rq)) {}
21+
}
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
(
2+
types: [
3+
(
4+
name: None,
5+
inner: Scalar((
6+
kind: Float,
7+
width: 4,
8+
)),
9+
),
10+
(
11+
name: None,
12+
inner: AccelerationStructure,
13+
),
14+
(
15+
name: None,
16+
inner: RayQuery,
17+
),
18+
(
19+
name: None,
20+
inner: Scalar((
21+
kind: Uint,
22+
width: 4,
23+
)),
24+
),
25+
(
26+
name: None,
27+
inner: Vector(
28+
size: Tri,
29+
scalar: (
30+
kind: Float,
31+
width: 4,
32+
),
33+
),
34+
),
35+
(
36+
name: Some("RayDesc"),
37+
inner: Struct(
38+
members: [
39+
(
40+
name: Some("flags"),
41+
ty: 4,
42+
binding: None,
43+
offset: 0,
44+
),
45+
(
46+
name: Some("cull_mask"),
47+
ty: 4,
48+
binding: None,
49+
offset: 4,
50+
),
51+
(
52+
name: Some("tmin"),
53+
ty: 1,
54+
binding: None,
55+
offset: 8,
56+
),
57+
(
58+
name: Some("tmax"),
59+
ty: 1,
60+
binding: None,
61+
offset: 12,
62+
),
63+
(
64+
name: Some("origin"),
65+
ty: 5,
66+
binding: None,
67+
offset: 16,
68+
),
69+
(
70+
name: Some("dir"),
71+
ty: 5,
72+
binding: None,
73+
offset: 32,
74+
),
75+
],
76+
span: 48,
77+
),
78+
),
79+
],
80+
special_types: (
81+
ray_desc: Some(6),
82+
ray_intersection: None,
83+
predeclared_types: {},
84+
),
85+
constants: [],
86+
overrides: [
87+
(
88+
name: Some("o"),
89+
id: None,
90+
ty: 1,
91+
init: None,
92+
),
93+
],
94+
global_variables: [
95+
(
96+
name: Some("acc_struct"),
97+
space: Handle,
98+
binding: Some((
99+
group: 0,
100+
binding: 0,
101+
)),
102+
ty: 2,
103+
init: None,
104+
),
105+
],
106+
global_expressions: [],
107+
functions: [],
108+
entry_points: [
109+
(
110+
name: "main",
111+
stage: Compute,
112+
early_depth_test: None,
113+
workgroup_size: (1, 1, 1),
114+
function: (
115+
name: Some("main"),
116+
arguments: [],
117+
result: None,
118+
local_variables: [
119+
(
120+
name: Some("rq"),
121+
ty: 3,
122+
init: None,
123+
),
124+
],
125+
expressions: [
126+
LocalVariable(1),
127+
Literal(U32(4)),
128+
Literal(U32(255)),
129+
Override(1),
130+
Literal(F32(17.0)),
131+
Binary(
132+
op: Multiply,
133+
left: 4,
134+
right: 5,
135+
),
136+
Override(1),
137+
Literal(F32(19.0)),
138+
Binary(
139+
op: Multiply,
140+
left: 7,
141+
right: 8,
142+
),
143+
Override(1),
144+
Literal(F32(23.0)),
145+
Binary(
146+
op: Multiply,
147+
left: 10,
148+
right: 11,
149+
),
150+
Splat(
151+
size: Tri,
152+
value: 12,
153+
),
154+
Override(1),
155+
Literal(F32(29.0)),
156+
Binary(
157+
op: Multiply,
158+
left: 14,
159+
right: 15,
160+
),
161+
Override(1),
162+
Literal(F32(31.0)),
163+
Binary(
164+
op: Multiply,
165+
left: 17,
166+
right: 18,
167+
),
168+
Override(1),
169+
Literal(F32(37.0)),
170+
Binary(
171+
op: Multiply,
172+
left: 20,
173+
right: 21,
174+
),
175+
Compose(
176+
ty: 5,
177+
components: [
178+
16,
179+
19,
180+
22,
181+
],
182+
),
183+
Compose(
184+
ty: 6,
185+
components: [
186+
2,
187+
3,
188+
6,
189+
9,
190+
13,
191+
23,
192+
],
193+
),
194+
GlobalVariable(1),
195+
RayQueryProceedResult,
196+
],
197+
named_expressions: {
198+
24: "desc",
199+
},
200+
body: [
201+
Emit((
202+
start: 5,
203+
end: 6,
204+
)),
205+
Emit((
206+
start: 8,
207+
end: 9,
208+
)),
209+
Emit((
210+
start: 11,
211+
end: 13,
212+
)),
213+
Emit((
214+
start: 15,
215+
end: 16,
216+
)),
217+
Emit((
218+
start: 18,
219+
end: 19,
220+
)),
221+
Emit((
222+
start: 21,
223+
end: 24,
224+
)),
225+
RayQuery(
226+
query: 1,
227+
fun: Initialize(
228+
acceleration_structure: 25,
229+
descriptor: 24,
230+
),
231+
),
232+
Loop(
233+
body: [
234+
RayQuery(
235+
query: 1,
236+
fun: Proceed(
237+
result: 26,
238+
),
239+
),
240+
If(
241+
condition: 26,
242+
accept: [],
243+
reject: [
244+
Break,
245+
],
246+
),
247+
Block([]),
248+
],
249+
continuing: [],
250+
break_if: None,
251+
),
252+
Return(
253+
value: None,
254+
),
255+
],
256+
),
257+
),
258+
],
259+
)

0 commit comments

Comments
 (0)