Skip to content

Commit 4823ae5

Browse files
ficoligcbot
authored andcommitted
Revert "Refactor OCL raytracing builtins"
This reverts commit e3d9f75.
1 parent a01ca4f commit 4823ae5

File tree

3 files changed

+78
-99
lines changed

3 files changed

+78
-99
lines changed

IGC/BiFModule/Languages/OpenCL/Raytracing/IBiF_intel_rt_production.cl

Lines changed: 75 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ SPDX-License-Identifier: MIT
1212
#if defined(cl_intel_rt_production)
1313

1414
void __basic_rtstack_init(
15-
global void* rtStack,
15+
global RTStack* rtStack,
1616
global HWAccel* hwaccel,
1717
intel_float3 origin,
1818
intel_float3 direction,
@@ -23,41 +23,38 @@ void __basic_rtstack_init(
2323
{
2424
unsigned int bvh_level = 0;
2525
/* 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);
5754
}
5855

5956
void __basic_ray_forward(
60-
global void* rtStack,
57+
global RTStack* rtStack,
6158
HWAccel* hwaccel,
6259
uint bvhLevel,
6360
intel_float3 origin,
@@ -67,23 +64,22 @@ void __basic_ray_forward(
6764
uint mask,
6865
intel_ray_flags_t flags)
6966
{
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);
8783
}
8884

8985
typedef enum
@@ -101,7 +97,8 @@ intel_ray_query_t intel_ray_query_init(
10197
{
10298
global HWAccel* hwaccel = to_global((HWAccel*)accel);
10399
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));
105102

106103
__basic_rtstack_init(rtStack, hwaccel, ray.origin, ray.direction, ray.tmin, ray.tmax, ray.mask, ray.flags);
107104

@@ -122,7 +119,7 @@ void intel_ray_query_forward_ray(
122119
intel_raytracing_acceleration_structure_t accel_i)
123120
{
124121
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);
126123

127124
/* init ray */
128125
uint bvh_level = __builtin_IB_intel_query_bvh_level(rayquery) + 1;
@@ -142,18 +139,15 @@ void intel_ray_query_forward_ray(
142139

143140
void intel_ray_query_commit_potential_hit(intel_ray_query_t rayquery)
144141
{
145-
global void* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
142+
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
146143

147144
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]);
150146

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);
153147
if (rflags & intel_ray_flags_accept_first_hit_and_end_search)
154148
{
155-
*commitedHit = *potentialHit;
156-
MemHit_setValid(commitedHit, 1);
149+
rtStack->hit[COMMITTED] = rtStack->hit[POTENTIAL];
150+
MemHit_setValid(&rtStack->hit[COMMITTED], 1);
157151

158152
__builtin_IB_intel_update_ray_query(
159153
rayquery,
@@ -166,7 +160,7 @@ void intel_ray_query_commit_potential_hit(intel_ray_query_t rayquery)
166160
}
167161
else
168162
{
169-
MemHit_setValid(potentialHit, 1); // FIXME: is this required?
163+
MemHit_setValid(&rtStack->hit[POTENTIAL], 1); // FIXME: is this required?
170164

171165
__builtin_IB_intel_update_ray_query(
172166
rayquery,
@@ -182,20 +176,19 @@ void intel_ray_query_commit_potential_hit(intel_ray_query_t rayquery)
182176
void intel_ray_query_commit_potential_hit_override(
183177
intel_ray_query_t rayquery, float override_hit_distance, intel_float2 override_uv)
184178
{
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);
189182
intel_ray_query_commit_potential_hit(rayquery);
190183
}
191184

192185
void intel_ray_query_start_traversal(intel_ray_query_t rayquery)
193186
{
194187
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);
199192

200193
TraceRayCtrl ctrl = __builtin_IB_intel_query_ctrl(rayquery);
201194

@@ -221,9 +214,9 @@ void intel_ray_query_sync(intel_ray_query_t rayquery)
221214
rtfence_t fence = __builtin_IB_intel_query_rt_fence(rayquery);
222215
__builtin_IB_intel_rt_sync(fence);
223216

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]);
227220

228221
__builtin_IB_intel_update_ray_query(
229222
rayquery,
@@ -404,42 +397,39 @@ void intel_get_hit_triangle_vertices(
404397
// during any-hit or intersection shader execution.
405398
intel_float3 intel_get_ray_origin(intel_ray_query_t rayquery, uint bvh_level)
406399
{
407-
global void* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
400+
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
408401

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]};
411404
}
412405

413406
intel_float3 intel_get_ray_direction(intel_ray_query_t rayquery, uint bvh_level)
414407
{
415408
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
416409

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]};
419412
}
420413

421414
float intel_get_ray_tmin(intel_ray_query_t rayquery, uint bvh_level)
422415
{
423-
global void* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
416+
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
424417

425-
MemRay* memRay = get_rt_stack_ray(rtStack, bvh_level);
426-
return memRay->tnear;
418+
return rtStack->ray[bvh_level].tnear;
427419
}
428420

429421
intel_ray_flags_t intel_get_ray_flags(intel_ray_query_t rayquery, uint bvh_level)
430422
{
431-
global void* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
423+
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
432424

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]);
435426
}
436427

437428
int intel_get_ray_mask(intel_ray_query_t rayquery, uint bvh_level)
438429
{
439-
global void* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
430+
global RTStack* rtStack = __builtin_IB_intel_query_rt_stack(rayquery);
440431

441-
MemRay* memRay = get_rt_stack_ray(rtStack, bvh_level);
442-
return MemRay_getRayMask(memRay);
432+
return MemRay_getRayMask(&rtStack->ray[bvh_level]);
443433
}
444434

445435
// Test whether traversal has terminated. If false, the ray has reached

IGC/BiFModule/Languages/OpenCL/Raytracing/IBiF_intel_rt_struct_defs.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -259,17 +259,6 @@ inline MemHit* get_query_hit(intel_ray_query_t rayquery, intel_hit_type_t ty)
259259
return &rtStack->hit[ty];
260260
}
261261

262-
inline MemHit* get_rt_stack_hit(void* rtstack, intel_hit_type_t ty)
263-
{
264-
RTStack* rtStack = rtstack;
265-
return &rtStack->hit[ty];
266-
}
267-
268-
inline MemRay* get_rt_stack_ray(void* rtstack, uchar raynum)
269-
{
270-
RTStack* rtStack = rtstack;
271-
return &rtStack->ray[raynum];
272-
}
273262

274263
// === --------------------------------------------------------------------===
275264
// === PrimLeafDesc

IGC/Compiler/Optimizer/OpenCLPasses/RayTracing/ResolveOCLRaytracingBuiltins.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ void* __builtin_IB_intel_get_rt_stack( rtglobals_t rt_dispatch_globals );
184184
Returns a pointer to the data structure which the RT hardware operates on.
185185
The RT Stack address is computed as:
186186
syncStackSize = sizeof(HitInfo)*2 + (sizeof(Ray) + sizeof(TravStack))*RTDispatchGlobals.maxBVHLevels;
187-
syncBase = RTDispatchGlobals.rtMemBasePtr - (DSSID * NUM_SIMD_LANES_PER_DSS + StackID + 1)*syncStackSize; */
188-
/* Where DSSID is an index which uniquely identifies the DSS in the machine (across tiles), and StackID is compute as below:
187+
syncBase = RTDispatchGlobals.rtMemBasePtr - (DSSID * NUM_SIMD_LANES_PER_DSS + StackID + 1)*syncStackSize;
188+
Where DSSID is an index which uniquely identifies the DSS in the machine (across tiles), and StackID is compute as below:
189189
With fused EUs (e.g. in DG2) :
190190
StackID[10:0] (msb to lsb) = (EUID[3:0]<<7) | (THREAD_ID[2:0]<<4) | SIMD_LANE_ID[3:0]
191191
@@ -428,7 +428,7 @@ void ResolveOCLRaytracingBuiltins::handleUpdateRayQuery(llvm::CallInst& callInst
428428
Handler for the following builtins:
429429
rtfence_t __builtin_IB_intel_query_rt_fence(intel_ray_query_t);
430430
rtglobals_t __builtin_IB_intel_query_rt_globals(intel_ray_query_t);
431-
global void* __builtin_IB_intel_query_rt_stack(intel_ray_query_t);
431+
global RTStack* __builtin_IB_intel_query_rt_stack(intel_ray_query_t);
432432
TraceRayCtrl __builtin_IB_intel_query_ctrl(intel_ray_query_t);
433433
uint __builtin_IB_intel_query_bvh_level(intel_ray_query_t);
434434

0 commit comments

Comments
 (0)