@@ -223,6 +223,34 @@ __global__ void kFilterGroundPoints(size_t pointCount, const Vec3f sensor_up_vec
223
223
outNonGround[tid] = normalUpAngle > ground_angle_threshold;
224
224
}
225
225
226
+ __global__ void kProcessBeamSamplesFirstLast (size_t beamCount, int samplesPerBeam, MultiReturnPointers beamSamples,
227
+ MultiReturnPointers first, MultiReturnPointers last)
228
+ {
229
+ LIMIT (beamCount);
230
+
231
+ const auto beamIdx = tid;
232
+ int firstIdx = 0 ;
233
+ int lastIdx = 0 ;
234
+ for (int sampleIdx = 0 ; sampleIdx < samplesPerBeam; ++sampleIdx) {
235
+ if (beamSamples.isHit [beamIdx * samplesPerBeam + sampleIdx] == 0 ) {
236
+ continue ;
237
+ }
238
+ if (beamSamples.distance [beamIdx * samplesPerBeam + sampleIdx] <
239
+ beamSamples.distance [beamIdx * samplesPerBeam + firstIdx]) {
240
+ firstIdx = sampleIdx;
241
+ }
242
+ if (beamSamples.distance [beamIdx * samplesPerBeam + sampleIdx] >
243
+ beamSamples.distance [beamIdx * samplesPerBeam + lastIdx]) {
244
+ lastIdx = sampleIdx;
245
+ }
246
+ }
247
+ first.xyz [beamIdx] = beamSamples.xyz [beamIdx * samplesPerBeam + firstIdx];
248
+ first.distance [beamIdx] = beamSamples.distance [beamIdx * samplesPerBeam + firstIdx];
249
+ last.xyz [beamIdx] = beamSamples.xyz [beamIdx * samplesPerBeam + lastIdx];
250
+ last.distance [beamIdx] = beamSamples.distance [beamIdx * samplesPerBeam + lastIdx];
251
+ }
252
+
253
+
226
254
void gpuFindCompaction (cudaStream_t stream, size_t pointCount, const int32_t * shouldCompact,
227
255
CompactionIndexType* hitCountInclusive, size_t * outHitCount)
228
256
{
@@ -294,3 +322,9 @@ void gpuRadarComputeEnergy(cudaStream_t stream, size_t count, float rayAzimuthSt
294
322
run (kRadarComputeEnergy , stream, count, rayAzimuthStepRad, rayElevationStepRad, freq, lookAtOriginTransform, rayPose,
295
323
hitDist, hitNorm, hitPos, outBUBRFactor);
296
324
}
325
+
326
+ void gpuProcessBeamSamplesFirstLast (cudaStream_t stream, size_t beamCount, int samplesPerBeam, MultiReturnPointers beamSamples,
327
+ MultiReturnPointers first, MultiReturnPointers last)
328
+ {
329
+ run (kProcessBeamSamplesFirstLast , stream, beamCount, samplesPerBeam, beamSamples, first, last);
330
+ }
0 commit comments