File size: 1,420 Bytes
e05eed1 98a67a0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
// SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "../geometry.h"
#include "../cuda_intellisense.cuh"
template<typename T>
struct StridedQuad_ : QuadBase_<T, StridedQuad_<T>>
{
T *DataPtr = nullptr;
int64_t Stride = 0;
StridedQuad_() = default;
__host__ __device__
StridedQuad_(T *dataPtr, int64_t stride)
: DataPtr(dataPtr), Stride(stride) {}
__host__ __device__
const Point_<T> operator[](int64_t offset) const {
auto ptOffset = DataPtr + 2 * offset * Stride;
return {
*ptOffset,
ptOffset[Stride]
};
}
__host__ __device__
InPlaceQuad_<T> ToIPQuad() const
{
InPlaceQuad_<T> ret;
#pragma unroll
for (int64_t i = 0; i < 4; ++i) {
ret.Vertices[i] = (*this)[i];
}
return ret;
}
};
template<typename T>
struct StridedEmbedQuad_ : StridedQuad_<T>
{
using StridedQuad_<T>::StridedQuad_;
__host__ __device__ T &Confidence() { return this->DataPtr[8 * this->Stride]; }
__host__ __device__ const T Confidence() const { return this->DataPtr[8 * this->Stride]; }
__host__ __device__ T &NumQuads() { return this->DataPtr[9 * this->Stride]; }
__host__ __device__ const T NumQuads() const { return this->DataPtr[9 * this->Stride]; }
};
|