14CUDADeviceGraphicsInterop::CUDADeviceGraphicsInterop(CUDADeviceQueue *queue)
15 : queue_(queue), device_(static_cast<CUDADevice *>(queue->device))
19CUDADeviceGraphicsInterop::~CUDADeviceGraphicsInterop()
21 CUDAContextScope scope(device_);
23 if (cu_graphics_resource_) {
24 cuda_device_assert(device_, cuGraphicsUnregisterResource(cu_graphics_resource_));
28void CUDADeviceGraphicsInterop::set_display_interop(
37 if (opengl_pbo_id_ == display_interop.
opengl_pbo_id && buffer_area_ == new_buffer_area) {
42 CUDAContextScope scope(device_);
44 if (cu_graphics_resource_) {
45 cuda_device_assert(device_, cuGraphicsUnregisterResource(cu_graphics_resource_));
48 const CUresult result = cuGraphicsGLRegisterBuffer(
49 &cu_graphics_resource_, display_interop.
opengl_pbo_id, CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE);
50 if (result != CUDA_SUCCESS) {
51 LOG(ERROR) <<
"Error registering OpenGL buffer: " << cuewErrorString(result);
55 buffer_area_ = new_buffer_area;
60 if (!cu_graphics_resource_) {
64 CUDAContextScope scope(device_);
66 CUdeviceptr cu_buffer;
69 cuda_device_assert(device_, cuGraphicsMapResources(1, &cu_graphics_resource_, queue_->stream()));
71 device_, cuGraphicsResourceGetMappedPointer(&cu_buffer, &bytes, cu_graphics_resource_));
75 device_, cuMemsetD8Async(
static_cast<CUdeviceptr
>(cu_buffer), 0, bytes, queue_->stream()));
83void CUDADeviceGraphicsInterop::unmap()
85 CUDAContextScope scope(device_);
87 cuda_device_assert(device_,
88 cuGraphicsUnmapResources(1, &cu_graphics_resource_, queue_->stream()));
#define CCL_NAMESPACE_END