PeriDyno 0.8.2
CudaBuffer.cpp
Go to the documentation of this file.
1#include "CudaBuffer.h"
2
3#include <glad/glad.h>
4#include <cuda_gl_interop.h>
5
6namespace gl
7{
11
12 void CudaBuffer::allocate(int size)
13 {
14 if (size == this->size)
15 return;
16
18
19 // register the cuda resource after resize...
20 if (resource != 0)
21 {
22 cudaGraphicsUnregisterResource(resource);
23 }
24 cudaGraphicsGLRegisterBuffer(&resource, id, cudaGraphicsRegisterFlagsWriteDiscard);
25 }
26
27
29 {
31
32 if (resource != 0)
33 {
34 cudaGraphicsUnregisterResource(resource);
35 }
36 }
37
38 void CudaBuffer::loadCuda(void* src, int size)
39 {
40 if (src == 0)
41 return;
42
43 if (size > this->size)
44 {
46 }
47
48 // map cuda resource
49 size_t size0;
50 void* devicePtr = 0;
51 cudaGraphicsMapResources(1, &resource);
52 cudaGraphicsResourceGetMappedPointer(&devicePtr, &size0, resource);
53
54 cudaMemcpy(devicePtr, src, size, cudaMemcpyDefault);
55
56 cudaGraphicsUnmapResources(1, &resource);
57
58 cudaStreamSynchronize(0);
59 }
60
61}
virtual void release() override
Definition: Buffer.cpp:22
int size
Definition: Buffer.h:45
virtual void allocate(int size)
Definition: Buffer.cpp:43
virtual void allocate(int size)
for cuda
Definition: CudaBuffer.cpp:12
void loadCuda(void *src, int size)
Definition: CudaBuffer.cpp:38
virtual void release() override
Definition: CudaBuffer.cpp:28
cudaGraphicsResource * resource
Definition: CudaBuffer.h:34
Definition: CudaBuffer.cpp:7