1 module dcompute.driver.cuda.memory;
2
3 import dcompute.driver.error;
4 import dcompute.driver.cuda;
5
6 // void pointer like
7 struct MemoryPointer
8 {
9 size_t raw;
10 static MemoryPointer allocate(size_t nbytes)
11 {
12 MemoryPointer ret;
13 status = cast(Status)cuMemAlloc(&ret.raw,nbytes);
14 checkErrors();
15 return ret;
16 }
17 //static MemoryPointer allocatePitch(T)(size_t nbytes)
18
19 Memory addressRange()
20 {
21 Memory ret;
22 status = cast(Status)cuMemGetAddressRange(&ret.ptr.raw,&ret.length,raw);
23 checkErrors();
24 return ret;
25 }
26
27 }
28
29 // void[] like
30 struct Memory
31 {
32 MemoryPointer ptr;
33 size_t length;
34
35 enum CopySource
36 {
37 Host,
38 Device,
39 Array
40 }
41
42 // cuMemcpy and friends
43 // TODO: implement this properly
44 /*
45 template copy(T, CopySource from, CopySource to, int dimentions = 1,
46 Flag!"peer" _peer = No.peer)
47 {
48 auto copy(Memory to)
49 {
50 status = cast(Status)cuMemcpy(to.ptr.raw,ptr.raw,length);
51 checkErrors();
52 }
53 }*/
54
55 // TODO: cuMemset & frineds
56
57 }