28struct GPUTrackingInOutPointers;
29class GPUReconstruction;
66 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
69 static_assert((alignment & (alignment - 1)) == 0,
"Invalid alignment, not power of 2");
73 return addr & (alignment - 1);
75 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
78 size_t mod = getAlignmentMod<alignment>(addr);
82 return (alignment - mod);
84 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
87 return size + getAlignment<alignment>(
size);
91 if (alignment & (alignment - 1)) {
92 size_t tmp =
size % alignment;
94 size += alignment - tmp;
98 return (
size + alignment - 1) & ~(alignment - 1);
101 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
104 return (
reinterpret_cast<void*
>(nextMultipleOf<alignment>(
reinterpret_cast<size_t>(
ptr))));
106 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
109 return (getAlignmentMod<alignment>(
reinterpret_cast<size_t>(addr)));
111 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT>
114 return (getAlignment<alignment>(
reinterpret_cast<size_t>(addr)));
116 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT,
class S>
122 constexpr const size_t maxAlign = (
alignof(
S) > alignment) ?
alignof(
S) : alignment;
123 basePtr += getAlignment<maxAlign>(basePtr);
125 basePtr += nEntries *
sizeof(
S);
129 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT,
class S>
132 size_t tmp = (size_t)basePtr;
133 auto retVal = getPointerWithAlignment<alignment, S>(tmp, nEntries);
134 basePtr = (
void*)tmp;
138 template <
size_t alignment = constants::GPU_BUFFER_ALIGNMENT,
class T,
class S>
141 size_t tmp = (size_t)basePtr;
142 objPtr = getPointerWithAlignment<alignment, S>(tmp, nEntries);
146 template <
class T,
class S>
149 if ((
size_t)basePtr < constants::GPU_BUFFER_ALIGNMENT) {
150 basePtr = (T*)constants::GPU_BUFFER_ALIGNMENT;
152 size_t tmp = (size_t)basePtr;
153 objPtr =
reinterpret_cast<S*
>(getPointerWithAlignment<1, char>(tmp, nEntries *
sizeof(
S)));
167 bool mAllocateAndInitializeLate;
static constexpr size_t nextMultipleOf(size_t size, size_t alignment)
GPUProcessor & operator=(const GPUProcessor &)=delete
uint32_t uint32_t uint32_t param3
GPUconstantref() const GPUConstantMem *mConstantMem
GPUd() GPUconstantref() const GPUConstantMem *GetConstantMem() const
static S * getPointerWithAlignment(size_t &basePtr, size_t nEntries=1)
static size_t getAlignmentMod(void *addr)
GPUProcessor(const GPUProcessor &)=delete
static constexpr size_t getAlignmentMod(size_t addr)
static void computePointerWithAlignment(T *&basePtr, S *&objPtr, size_t nEntries=1)
void InitGPUProcessor(GPUReconstruction *rec, ProcessorType type=PROCESSOR_TYPE_CPU, GPUProcessor *slaveProcessor=nullptr)
static constexpr size_t nextMultipleOf(size_t size)
static S * getPointerWithAlignment(void *&basePtr, size_t nEntries=1)
static void * alignPointer(void *ptr)
ProcessorType mGPUProcessorType
static size_t getAlignment(void *addr)
static constexpr size_t getAlignment(size_t addr)
void AllocateAndInitializeLate()
GPUProcessor * mLinkedProcessor
const GPUReconstruction & GetRec() const
static void computePointerWithoutAlignment(T *&basePtr, S *&objPtr, size_t nEntries=1)
GLint GLint GLsizei GLint GLenum GLenum type