@@ -12,7 +12,7 @@ SPDX-License-Identifier: MIT
12
12
#if defined(cl_intel_rt_production )
13
13
14
14
void __basic_rtstack_init (
15
- global void * rtStack ,
15
+ global RTStack * rtStack ,
16
16
global HWAccel * hwaccel ,
17
17
intel_float3 origin ,
18
18
intel_float3 direction ,
@@ -23,41 +23,38 @@ void __basic_rtstack_init(
23
23
{
24
24
unsigned int bvh_level = 0 ;
25
25
/* init ray */
26
- MemRay * memRay = get_rt_stack_ray (rtStack , bvh_level );
27
- memRay -> org [0 ] = origin .x ;
28
- memRay -> org [1 ] = origin .y ;
29
- memRay -> org [2 ] = origin .z ;
30
- memRay -> dir [0 ] = direction .x ;
31
- memRay -> dir [1 ] = direction .y ;
32
- memRay -> dir [2 ] = direction .z ;
33
- memRay -> tnear = tmin ;
34
- memRay -> tfar = tmax ;
35
-
36
- memRay -> data [1 ] = 0 ;
37
- memRay -> data [2 ] = 0 ;
38
- memRay -> data [3 ] = 0 ;
39
-
40
- MemRay_setRootNodePtr (memRay , (ulong )hwaccel + 128 );
41
- MemRay_setRayFlags (memRay , flags );
42
- MemRay_setRayMask (memRay , mask );
43
-
44
- MemHit * commitedHit = get_rt_stack_hit (rtStack , intel_hit_type_committed_hit );
45
- MemHit_clearUV (commitedHit );
46
- commitedHit -> t = INFINITY ;
47
- commitedHit -> data0 = 0 ;
48
- MemHit_setValid (commitedHit , 0 );
49
- MemHit_setDone (commitedHit , 0 );
50
-
51
- MemHit * potentialHit = get_rt_stack_hit (rtStack , intel_hit_type_potential_hit );
52
- MemHit_clearUV (potentialHit );
53
- potentialHit -> t = INFINITY ;
54
- potentialHit -> data0 = 0 ;
55
- MemHit_setValid (potentialHit , 1 );
56
- MemHit_setDone (potentialHit , 1 );
26
+ rtStack -> ray [bvh_level ].org [0 ] = origin .x ;
27
+ rtStack -> ray [bvh_level ].org [1 ] = origin .y ;
28
+ rtStack -> ray [bvh_level ].org [2 ] = origin .z ;
29
+ rtStack -> ray [bvh_level ].dir [0 ] = direction .x ;
30
+ rtStack -> ray [bvh_level ].dir [1 ] = direction .y ;
31
+ rtStack -> ray [bvh_level ].dir [2 ] = direction .z ;
32
+ rtStack -> ray [bvh_level ].tnear = tmin ;
33
+ rtStack -> ray [bvh_level ].tfar = tmax ;
34
+
35
+ rtStack -> ray [bvh_level ].data [1 ] = 0 ;
36
+ rtStack -> ray [bvh_level ].data [2 ] = 0 ;
37
+ rtStack -> ray [bvh_level ].data [3 ] = 0 ;
38
+
39
+ MemRay_setRootNodePtr (& rtStack -> ray [bvh_level ], (ulong )hwaccel + 128 );
40
+ MemRay_setRayFlags (& rtStack -> ray [bvh_level ], flags );
41
+ MemRay_setRayMask (& rtStack -> ray [bvh_level ], mask );
42
+
43
+ MemHit_clearUV (& rtStack -> hit [COMMITTED ]);
44
+ rtStack -> hit [COMMITTED ].t = INFINITY ;
45
+ rtStack -> hit [COMMITTED ].data0 = 0 ;
46
+ MemHit_setValid (& rtStack -> hit [COMMITTED ], 0 );
47
+ MemHit_setDone (& rtStack -> hit [COMMITTED ], 0 );
48
+
49
+ MemHit_clearUV (& rtStack -> hit [POTENTIAL ]);
50
+ rtStack -> hit [POTENTIAL ].t = INFINITY ;
51
+ rtStack -> hit [POTENTIAL ].data0 = 0 ;
52
+ MemHit_setValid (& rtStack -> hit [POTENTIAL ], 1 );
53
+ MemHit_setDone (& rtStack -> hit [POTENTIAL ], 1 );
57
54
}
58
55
59
56
void __basic_ray_forward (
60
- global void * rtStack ,
57
+ global RTStack * rtStack ,
61
58
HWAccel * hwaccel ,
62
59
uint bvhLevel ,
63
60
intel_float3 origin ,
@@ -67,23 +64,22 @@ void __basic_ray_forward(
67
64
uint mask ,
68
65
intel_ray_flags_t flags )
69
66
{
70
- MemRay * memRay = get_rt_stack_ray (rtStack , bvhLevel );
71
- memRay -> org [0 ] = origin .x ;
72
- memRay -> org [1 ] = origin .y ;
73
- memRay -> org [2 ] = origin .z ;
74
- memRay -> dir [0 ] = direction .x ;
75
- memRay -> dir [1 ] = direction .y ;
76
- memRay -> dir [2 ] = direction .z ;
77
- memRay -> tnear = tmin ;
78
- memRay -> tfar = tmax ;
79
-
80
- memRay -> data [1 ] = 0 ;
81
- memRay -> data [2 ] = 0 ;
82
- memRay -> data [3 ] = 0 ;
83
-
84
- MemRay_setRootNodePtr (memRay , (ulong )hwaccel + 128 );
85
- MemRay_setRayFlags (memRay , flags );
86
- MemRay_setRayMask (memRay , mask );
67
+ rtStack -> ray [bvhLevel ].org [0 ] = origin .x ;
68
+ rtStack -> ray [bvhLevel ].org [1 ] = origin .y ;
69
+ rtStack -> ray [bvhLevel ].org [2 ] = origin .z ;
70
+ rtStack -> ray [bvhLevel ].dir [0 ] = direction .x ;
71
+ rtStack -> ray [bvhLevel ].dir [1 ] = direction .y ;
72
+ rtStack -> ray [bvhLevel ].dir [2 ] = direction .z ;
73
+ rtStack -> ray [bvhLevel ].tnear = tmin ;
74
+ rtStack -> ray [bvhLevel ].tfar = tmax ;
75
+
76
+ rtStack -> ray [bvhLevel ].data [1 ] = 0 ;
77
+ rtStack -> ray [bvhLevel ].data [2 ] = 0 ;
78
+ rtStack -> ray [bvhLevel ].data [3 ] = 0 ;
79
+
80
+ MemRay_setRootNodePtr (& rtStack -> ray [bvhLevel ], (ulong )hwaccel + 128 );
81
+ MemRay_setRayFlags (& rtStack -> ray [bvhLevel ], flags );
82
+ MemRay_setRayMask (& rtStack -> ray [bvhLevel ], mask );
87
83
}
88
84
89
85
typedef enum
@@ -101,7 +97,8 @@ intel_ray_query_t intel_ray_query_init(
101
97
{
102
98
global HWAccel * hwaccel = to_global ((HWAccel * )accel );
103
99
rtglobals_t dispatchGlobalsPtr = (rtglobals_t ) __getImplicitDispatchGlobals ();
104
- global void * rtStack = to_global (__builtin_IB_intel_get_rt_stack (dispatchGlobalsPtr ));
100
+ global RTStack * rtStack =
101
+ to_global ((RTStack * )__builtin_IB_intel_get_rt_stack (dispatchGlobalsPtr ));
105
102
106
103
__basic_rtstack_init (rtStack , hwaccel , ray .origin , ray .direction , ray .tmin , ray .tmax , ray .mask , ray .flags );
107
104
@@ -122,7 +119,7 @@ void intel_ray_query_forward_ray(
122
119
intel_raytracing_acceleration_structure_t accel_i )
123
120
{
124
121
HWAccel * hwaccel = (HWAccel * )accel_i ;
125
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
122
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
126
123
127
124
/* init ray */
128
125
uint bvh_level = __builtin_IB_intel_query_bvh_level (rayquery ) + 1 ;
@@ -142,18 +139,15 @@ void intel_ray_query_forward_ray(
142
139
143
140
void intel_ray_query_commit_potential_hit (intel_ray_query_t rayquery )
144
141
{
145
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
142
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
146
143
147
144
uint bvh_level = __builtin_IB_intel_query_bvh_level (rayquery );
148
- MemRay * memRay = get_rt_stack_ray (rtStack , bvh_level );
149
- uint rflags = MemRay_getRayFlags (memRay );
145
+ uint rflags = MemRay_getRayFlags (& rtStack -> ray [bvh_level ]);
150
146
151
- MemHit * commitedHit = get_rt_stack_hit (rtStack , intel_hit_type_committed_hit );
152
- MemHit * potentialHit = get_rt_stack_hit (rtStack , intel_hit_type_potential_hit );
153
147
if (rflags & intel_ray_flags_accept_first_hit_and_end_search )
154
148
{
155
- * commitedHit = * potentialHit ;
156
- MemHit_setValid (commitedHit , 1 );
149
+ rtStack -> hit [ COMMITTED ] = rtStack -> hit [ POTENTIAL ] ;
150
+ MemHit_setValid (& rtStack -> hit [ COMMITTED ] , 1 );
157
151
158
152
__builtin_IB_intel_update_ray_query (
159
153
rayquery ,
@@ -166,7 +160,7 @@ void intel_ray_query_commit_potential_hit(intel_ray_query_t rayquery)
166
160
}
167
161
else
168
162
{
169
- MemHit_setValid (potentialHit , 1 ); // FIXME: is this required?
163
+ MemHit_setValid (& rtStack -> hit [ POTENTIAL ] , 1 ); // FIXME: is this required?
170
164
171
165
__builtin_IB_intel_update_ray_query (
172
166
rayquery ,
@@ -182,20 +176,19 @@ void intel_ray_query_commit_potential_hit(intel_ray_query_t rayquery)
182
176
void intel_ray_query_commit_potential_hit_override (
183
177
intel_ray_query_t rayquery , float override_hit_distance , intel_float2 override_uv )
184
178
{
185
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
186
- MemHit * potentialHit = get_rt_stack_hit (rtStack , intel_hit_type_potential_hit );
187
- potentialHit -> t = override_hit_distance ;
188
- MemHit_setUV (potentialHit , override_uv .x , override_uv .y );
179
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
180
+ rtStack -> hit [POTENTIAL ].t = override_hit_distance ;
181
+ MemHit_setUV (& rtStack -> hit [POTENTIAL ], override_uv .x , override_uv .y );
189
182
intel_ray_query_commit_potential_hit (rayquery );
190
183
}
191
184
192
185
void intel_ray_query_start_traversal (intel_ray_query_t rayquery )
193
186
{
194
187
rtglobals_t dispatchGlobalsPtr = __builtin_IB_intel_query_rt_globals (rayquery );
195
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
196
- MemHit * potentialHit = get_rt_stack_hit ( rtStack , intel_hit_type_potential_hit );
197
- MemHit_setDone (potentialHit , 1 );
198
- MemHit_setValid (potentialHit , 1 );
188
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
189
+
190
+ MemHit_setDone (& rtStack -> hit [ POTENTIAL ] , 1 );
191
+ MemHit_setValid (& rtStack -> hit [ POTENTIAL ] , 1 );
199
192
200
193
TraceRayCtrl ctrl = __builtin_IB_intel_query_ctrl (rayquery );
201
194
@@ -221,9 +214,9 @@ void intel_ray_query_sync(intel_ray_query_t rayquery)
221
214
rtfence_t fence = __builtin_IB_intel_query_rt_fence (rayquery );
222
215
__builtin_IB_intel_rt_sync (fence );
223
216
224
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
225
- MemHit * potentialHit = get_rt_stack_hit ( rtStack , intel_hit_type_potential_hit );
226
- uint bvh_level = MemHit_getBvhLevel (potentialHit );
217
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
218
+
219
+ uint bvh_level = MemHit_getBvhLevel (& rtStack -> hit [ POTENTIAL ] );
227
220
228
221
__builtin_IB_intel_update_ray_query (
229
222
rayquery ,
@@ -404,42 +397,39 @@ void intel_get_hit_triangle_vertices(
404
397
// during any-hit or intersection shader execution.
405
398
intel_float3 intel_get_ray_origin (intel_ray_query_t rayquery , uint bvh_level )
406
399
{
407
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
400
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
408
401
409
- MemRay * memRay = get_rt_stack_ray ( rtStack , bvh_level ) ;
410
- return (intel_float3 ){memRay -> org [0 ], memRay -> org [1 ], memRay -> org [2 ]};
402
+ global MemRay * ray = & rtStack -> ray [ bvh_level ] ;
403
+ return (intel_float3 ){ray -> org [0 ], ray -> org [1 ], ray -> org [2 ]};
411
404
}
412
405
413
406
intel_float3 intel_get_ray_direction (intel_ray_query_t rayquery , uint bvh_level )
414
407
{
415
408
global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
416
409
417
- MemRay * memRay = get_rt_stack_ray ( rtStack , bvh_level ) ;
418
- return (intel_float3 ){memRay -> dir [0 ], memRay -> dir [1 ], memRay -> dir [2 ]};
410
+ global MemRay * ray = & rtStack -> ray [ bvh_level ] ;
411
+ return (intel_float3 ){ray -> dir [0 ], ray -> dir [1 ], ray -> dir [2 ]};
419
412
}
420
413
421
414
float intel_get_ray_tmin (intel_ray_query_t rayquery , uint bvh_level )
422
415
{
423
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
416
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
424
417
425
- MemRay * memRay = get_rt_stack_ray (rtStack , bvh_level );
426
- return memRay -> tnear ;
418
+ return rtStack -> ray [bvh_level ].tnear ;
427
419
}
428
420
429
421
intel_ray_flags_t intel_get_ray_flags (intel_ray_query_t rayquery , uint bvh_level )
430
422
{
431
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
423
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
432
424
433
- MemRay * memRay = get_rt_stack_ray (rtStack , bvh_level );
434
- return (intel_ray_flags_t )MemRay_getRayFlags (memRay );
425
+ return (intel_ray_flags_t )MemRay_getRayFlags (& rtStack -> ray [bvh_level ]);
435
426
}
436
427
437
428
int intel_get_ray_mask (intel_ray_query_t rayquery , uint bvh_level )
438
429
{
439
- global void * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
430
+ global RTStack * rtStack = __builtin_IB_intel_query_rt_stack (rayquery );
440
431
441
- MemRay * memRay = get_rt_stack_ray (rtStack , bvh_level );
442
- return MemRay_getRayMask (memRay );
432
+ return MemRay_getRayMask (& rtStack -> ray [bvh_level ]);
443
433
}
444
434
445
435
// Test whether traversal has terminated. If false, the ray has reached
0 commit comments