|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
#include <iostream> |
|
#include <vector> |
|
#include "rasterizer.h" |
|
#include <cuda_runtime_api.h> |
|
|
|
namespace CudaRasterizer |
|
{ |
|
template <typename T> |
|
static void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment) |
|
{ |
|
std::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1); |
|
ptr = reinterpret_cast<T*>(offset); |
|
chunk = reinterpret_cast<char*>(ptr + count); |
|
} |
|
|
|
struct GeometryState |
|
{ |
|
size_t scan_size; |
|
float* depths; |
|
char* scanning_space; |
|
bool* clamped; |
|
int* internal_radii; |
|
float2* means2D; |
|
float* cov3D; |
|
float4* conic_opacity; |
|
float* rgb; |
|
uint32_t* point_offsets; |
|
uint32_t* tiles_touched; |
|
|
|
static GeometryState fromChunk(char*& chunk, size_t P); |
|
}; |
|
|
|
struct ImageState |
|
{ |
|
uint2* ranges; |
|
uint32_t* n_contrib; |
|
float* accum_alpha; |
|
|
|
static ImageState fromChunk(char*& chunk, size_t N); |
|
}; |
|
|
|
struct BinningState |
|
{ |
|
size_t sorting_size; |
|
uint64_t* point_list_keys_unsorted; |
|
uint64_t* point_list_keys; |
|
uint32_t* point_list_unsorted; |
|
uint32_t* point_list; |
|
char* list_sorting_space; |
|
|
|
static BinningState fromChunk(char*& chunk, size_t P); |
|
}; |
|
|
|
template<typename T> |
|
size_t required(size_t P) |
|
{ |
|
char* size = nullptr; |
|
T::fromChunk(size, P); |
|
return ((size_t)size) + 128; |
|
} |
|
}; |