-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathrasterizer_impl.h
More file actions
99 lines (88 loc) · 2.13 KB
/
rasterizer_impl.h
File metadata and controls
99 lines (88 loc) · 2.13 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright (C) 2023 - 2025, Inria
* GRAPHDECO research group, https://team.inria.fr/graphdeco
* All rights reserved.
*
* This software is free for non-commercial, research and evaluation use
* under the terms of the LICENSE.md file.
*
* For inquiries contact george.drettakis@inria.fr
*/
#pragma once
#include <cstdint> // defines uint32_t, uint64_t, std::uintptr_t, etc.
#include <cstddef>
#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;
float* dists;
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
{
uint32_t *bucket_count;
uint32_t *bucket_offsets;
size_t bucket_count_scan_size;
char * bucket_count_scanning_space;
float* pixel_colors;
float* pixel_invDepths;
uint32_t* max_contrib;
size_t scan_size;
uint2* ranges;
uint32_t* n_contrib;
float* accum_alpha;
char* contrib_scan;
static ImageState fromChunk(char*& chunk, size_t N);
};
struct BinningState
{
size_t scan_size;
size_t sorting_size;
uint64_t* point_list_keys_unsorted;
uint64_t* point_list_keys;
uint32_t* point_list_unsorted;
uint32_t* point_list;
int* scan_src;
int* scan_dst;
char* scan_space;
char* list_sorting_space;
static BinningState fromChunk(char*& chunk, size_t P);
};
struct SampleState
{
uint32_t *bucket_to_tile;
float *T;
float *ar;
float *ard;
static SampleState fromChunk(char*& chunk, size_t C);
};
template<typename T>
size_t required(size_t P)
{
char* size = nullptr;
T::fromChunk(size, P);
return ((size_t)size) + 128;
}
};