1 /* GStreamer 2 * Copyright (C) 2019 Seungha Yang <seungha.yang@navercorp.com> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifdef HAVE_CONFIG_H 21 #include "config.h" 22 #endif 23 24 #include "gstcudaloader.h" 25 #include <gmodule.h> 26 27 GST_DEBUG_CATEGORY_EXTERN (gst_nvcodec_debug); 28 #define GST_CAT_DEFAULT gst_nvcodec_debug 29 30 #ifndef G_OS_WIN32 31 #define CUDA_LIBNAME "libcuda.so.1" 32 #else 33 #define CUDA_LIBNAME "nvcuda.dll" 34 #endif 35 36 #define LOAD_SYMBOL(name,func) G_STMT_START { \ 37 if (!g_module_symbol (module, G_STRINGIFY (name), (gpointer *) &vtable->func)) { \ 38 GST_ERROR ("Failed to load '%s' from %s, %s", G_STRINGIFY (name), filename, g_module_error()); \ 39 goto error; \ 40 } \ 41 } G_STMT_END; 42 43 typedef struct _GstNvCodecCudaVTable 44 { 45 gboolean loaded; 46 47 CUresult (CUDAAPI * CuInit) (unsigned int Flags); 48 CUresult (CUDAAPI * CuGetErrorName) (CUresult error, const char **pStr); 49 CUresult (CUDAAPI * CuGetErrorString) (CUresult error, const char **pStr); 50 51 CUresult (CUDAAPI * CuCtxCreate) (CUcontext * pctx, unsigned int flags, 52 CUdevice dev); 53 CUresult (CUDAAPI * CuCtxDestroy) (CUcontext ctx); 54 CUresult (CUDAAPI * CuCtxPopCurrent) (CUcontext * pctx); 55 CUresult (CUDAAPI * CuCtxPushCurrent) (CUcontext ctx); 56 57 CUresult (CUDAAPI * CuCtxEnablePeerAccess) (CUcontext peerContext, 58 unsigned int Flags); 59 CUresult (CUDAAPI * CuCtxDisablePeerAccess) (CUcontext peerContext); 60 CUresult (CUDAAPI * CuGraphicsMapResources) (unsigned int count, 61 CUgraphicsResource * resources, CUstream hStream); 62 CUresult (CUDAAPI * CuGraphicsUnmapResources) (unsigned int count, 63 CUgraphicsResource * resources, CUstream hStream); 64 CUresult (CUDAAPI * CuGraphicsSubResourceGetMappedArray) (CUarray * pArray, 65 CUgraphicsResource resource, unsigned int arrayIndex, 66 unsigned int mipLevel); 67 CUresult (CUDAAPI * CuGraphicsResourceGetMappedPointer) (CUdeviceptr * 68 pDevPtr, size_t * pSize, CUgraphicsResource resource); 69 CUresult (CUDAAPI * 70 CuGraphicsUnregisterResource) (CUgraphicsResource resource); 71 72 CUresult (CUDAAPI * CuMemAlloc) (CUdeviceptr * dptr, unsigned int bytesize); 73 CUresult (CUDAAPI * CuMemAllocPitch) (CUdeviceptr * dptr, size_t * pPitch, 74 size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes); 75 CUresult (CUDAAPI * CuMemAllocHost) (void **pp, unsigned int bytesize); 76 CUresult (CUDAAPI * CuMemcpy2D) (const CUDA_MEMCPY2D * pCopy); 77 CUresult (CUDAAPI * CuMemcpy2DAsync) (const CUDA_MEMCPY2D * pCopy, 78 CUstream hStream); 79 80 CUresult (CUDAAPI * CuMemFree) (CUdeviceptr dptr); 81 CUresult (CUDAAPI * CuMemFreeHost) (void *p); 82 83 CUresult (CUDAAPI * CuStreamCreate) (CUstream * phStream, 84 unsigned int Flags); 85 CUresult (CUDAAPI * CuStreamDestroy) (CUstream hStream); 86 CUresult (CUDAAPI * CuStreamSynchronize) (CUstream hStream); 87 88 CUresult (CUDAAPI * CuDeviceGet) (CUdevice * device, int ordinal); 89 CUresult (CUDAAPI * CuDeviceGetCount) (int *count); 90 CUresult (CUDAAPI * CuDeviceGetName) (char *name, int len, CUdevice dev); 91 CUresult (CUDAAPI * CuDeviceGetAttribute) (int *pi, 92 CUdevice_attribute attrib, CUdevice dev); 93 CUresult (CUDAAPI * CuDeviceCanAccessPeer) (int *canAccessPeer, 94 CUdevice dev, CUdevice peerDev); 95 CUresult (CUDAAPI * CuDriverGetVersion) (int *driverVersion); 96 97 CUresult (CUDAAPI * CuModuleLoadData) (CUmodule * module, 98 const void *image); 99 CUresult (CUDAAPI * CuModuleUnload) (CUmodule module); 100 CUresult (CUDAAPI * CuModuleGetFunction) (CUfunction * hfunc, 101 CUmodule hmod, const char *name); 102 CUresult (CUDAAPI * CuTexObjectCreate) (CUtexObject * pTexObject, 103 const CUDA_RESOURCE_DESC * pResDesc, const CUDA_TEXTURE_DESC * pTexDesc, 104 const CUDA_RESOURCE_VIEW_DESC * pResViewDesc); 105 CUresult (CUDAAPI * CuTexObjectDestroy) (CUtexObject texObject); 106 CUresult (CUDAAPI * CuLaunchKernel) (CUfunction f, unsigned int gridDimX, 107 unsigned int gridDimY, unsigned int gridDimZ, 108 unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, 109 unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, 110 void **extra); 111 112 CUresult (CUDAAPI * CuGraphicsGLRegisterImage) (CUgraphicsResource * 113 pCudaResource, unsigned int image, unsigned int target, 114 unsigned int Flags); 115 CUresult (CUDAAPI * CuGraphicsGLRegisterBuffer) (CUgraphicsResource * 116 pCudaResource, unsigned int buffer, unsigned int Flags); 117 CUresult (CUDAAPI * 118 CuGraphicsResourceSetMapFlags) (CUgraphicsResource resource, 119 unsigned int flags); 120 CUresult (CUDAAPI * CuGLGetDevices) (unsigned int *pCudaDeviceCount, 121 CUdevice * pCudaDevices, unsigned int cudaDeviceCount, 122 CUGLDeviceList deviceList); 123 } GstNvCodecCudaVTable; 124 125 static GstNvCodecCudaVTable gst_cuda_vtable = { 0, }; 126 127 gboolean gst_cuda_load_library(void)128 gst_cuda_load_library (void) 129 { 130 GModule *module; 131 const gchar *filename = CUDA_LIBNAME; 132 GstNvCodecCudaVTable *vtable; 133 134 if (gst_cuda_vtable.loaded) 135 return TRUE; 136 137 module = g_module_open (filename, G_MODULE_BIND_LAZY); 138 if (module == NULL) { 139 GST_WARNING ("Could not open library %s, %s", filename, g_module_error ()); 140 return FALSE; 141 } 142 143 vtable = &gst_cuda_vtable; 144 145 /* cuda.h */ 146 LOAD_SYMBOL (cuInit, CuInit); 147 LOAD_SYMBOL (cuGetErrorName, CuGetErrorName); 148 LOAD_SYMBOL (cuGetErrorString, CuGetErrorString); 149 LOAD_SYMBOL (cuCtxCreate, CuCtxCreate); 150 LOAD_SYMBOL (cuCtxDestroy, CuCtxDestroy); 151 LOAD_SYMBOL (cuCtxPopCurrent, CuCtxPopCurrent); 152 LOAD_SYMBOL (cuCtxPushCurrent, CuCtxPushCurrent); 153 LOAD_SYMBOL (cuCtxEnablePeerAccess, CuCtxEnablePeerAccess); 154 LOAD_SYMBOL (cuCtxDisablePeerAccess, CuCtxDisablePeerAccess); 155 156 LOAD_SYMBOL (cuGraphicsMapResources, CuGraphicsMapResources); 157 LOAD_SYMBOL (cuGraphicsUnmapResources, CuGraphicsUnmapResources); 158 LOAD_SYMBOL (cuGraphicsSubResourceGetMappedArray, 159 CuGraphicsSubResourceGetMappedArray); 160 LOAD_SYMBOL (cuGraphicsResourceGetMappedPointer, 161 CuGraphicsResourceGetMappedPointer); 162 LOAD_SYMBOL (cuGraphicsUnregisterResource, CuGraphicsUnregisterResource); 163 164 LOAD_SYMBOL (cuMemAlloc, CuMemAlloc); 165 LOAD_SYMBOL (cuMemAllocPitch, CuMemAllocPitch); 166 LOAD_SYMBOL (cuMemAllocHost, CuMemAllocHost); 167 LOAD_SYMBOL (cuMemcpy2D, CuMemcpy2D); 168 LOAD_SYMBOL (cuMemcpy2DAsync, CuMemcpy2DAsync); 169 170 LOAD_SYMBOL (cuMemFree, CuMemFree); 171 LOAD_SYMBOL (cuMemFreeHost, CuMemFreeHost); 172 173 LOAD_SYMBOL (cuStreamCreate, CuStreamCreate); 174 LOAD_SYMBOL (cuStreamDestroy, CuStreamDestroy); 175 LOAD_SYMBOL (cuStreamSynchronize, CuStreamSynchronize); 176 177 LOAD_SYMBOL (cuDeviceGet, CuDeviceGet); 178 LOAD_SYMBOL (cuDeviceGetCount, CuDeviceGetCount); 179 LOAD_SYMBOL (cuDeviceGetName, CuDeviceGetName); 180 LOAD_SYMBOL (cuDeviceGetAttribute, CuDeviceGetAttribute); 181 LOAD_SYMBOL (cuDeviceCanAccessPeer, CuDeviceCanAccessPeer); 182 183 LOAD_SYMBOL (cuDriverGetVersion, CuDriverGetVersion); 184 185 LOAD_SYMBOL (cuModuleLoadData, CuModuleLoadData); 186 LOAD_SYMBOL (cuModuleUnload, CuModuleUnload); 187 LOAD_SYMBOL (cuModuleGetFunction, CuModuleGetFunction); 188 LOAD_SYMBOL (cuTexObjectCreate, CuTexObjectCreate); 189 LOAD_SYMBOL (cuTexObjectDestroy, CuTexObjectDestroy); 190 LOAD_SYMBOL (cuLaunchKernel, CuLaunchKernel); 191 192 /* cudaGL.h */ 193 LOAD_SYMBOL (cuGraphicsGLRegisterImage, CuGraphicsGLRegisterImage); 194 LOAD_SYMBOL (cuGraphicsGLRegisterBuffer, CuGraphicsGLRegisterBuffer); 195 LOAD_SYMBOL (cuGraphicsResourceSetMapFlags, CuGraphicsResourceSetMapFlags); 196 LOAD_SYMBOL (cuGLGetDevices, CuGLGetDevices); 197 198 vtable->loaded = TRUE; 199 200 return TRUE; 201 202 error: 203 g_module_close (module); 204 205 return FALSE; 206 } 207 208 CUresult CUDAAPI CuInit(unsigned int Flags)209 CuInit (unsigned int Flags) 210 { 211 g_assert (gst_cuda_vtable.CuInit != NULL); 212 213 return gst_cuda_vtable.CuInit (Flags); 214 } 215 216 CUresult CUDAAPI CuGetErrorName(CUresult error,const char ** pStr)217 CuGetErrorName (CUresult error, const char **pStr) 218 { 219 g_assert (gst_cuda_vtable.CuGetErrorName != NULL); 220 221 return gst_cuda_vtable.CuGetErrorName (error, pStr); 222 } 223 224 CUresult CUDAAPI CuGetErrorString(CUresult error,const char ** pStr)225 CuGetErrorString (CUresult error, const char **pStr) 226 { 227 g_assert (gst_cuda_vtable.CuGetErrorString != NULL); 228 229 return gst_cuda_vtable.CuGetErrorString (error, pStr); 230 } 231 232 CUresult CUDAAPI CuCtxCreate(CUcontext * pctx,unsigned int flags,CUdevice dev)233 CuCtxCreate (CUcontext * pctx, unsigned int flags, CUdevice dev) 234 { 235 g_assert (gst_cuda_vtable.CuCtxCreate != NULL); 236 237 return gst_cuda_vtable.CuCtxCreate (pctx, flags, dev); 238 } 239 240 CUresult CUDAAPI CuCtxDestroy(CUcontext ctx)241 CuCtxDestroy (CUcontext ctx) 242 { 243 g_assert (gst_cuda_vtable.CuCtxDestroy != NULL); 244 245 return gst_cuda_vtable.CuCtxDestroy (ctx); 246 } 247 248 CUresult CUDAAPI CuCtxPopCurrent(CUcontext * pctx)249 CuCtxPopCurrent (CUcontext * pctx) 250 { 251 g_assert (gst_cuda_vtable.CuCtxPopCurrent != NULL); 252 253 return gst_cuda_vtable.CuCtxPopCurrent (pctx); 254 } 255 256 CUresult CUDAAPI CuCtxPushCurrent(CUcontext ctx)257 CuCtxPushCurrent (CUcontext ctx) 258 { 259 g_assert (gst_cuda_vtable.CuCtxPushCurrent != NULL); 260 261 return gst_cuda_vtable.CuCtxPushCurrent (ctx); 262 } 263 264 CUresult CUDAAPI CuCtxEnablePeerAccess(CUcontext peerContext,unsigned int Flags)265 CuCtxEnablePeerAccess (CUcontext peerContext, unsigned int Flags) 266 { 267 g_assert (gst_cuda_vtable.CuCtxEnablePeerAccess != NULL); 268 269 return gst_cuda_vtable.CuCtxEnablePeerAccess (peerContext, Flags); 270 } 271 272 CUresult CUDAAPI CuCtxDisablePeerAccess(CUcontext peerContext)273 CuCtxDisablePeerAccess (CUcontext peerContext) 274 { 275 g_assert (gst_cuda_vtable.CuCtxDisablePeerAccess != NULL); 276 277 return gst_cuda_vtable.CuCtxDisablePeerAccess (peerContext); 278 } 279 280 CUresult CUDAAPI CuGraphicsMapResources(unsigned int count,CUgraphicsResource * resources,CUstream hStream)281 CuGraphicsMapResources (unsigned int count, CUgraphicsResource * resources, 282 CUstream hStream) 283 { 284 g_assert (gst_cuda_vtable.CuGraphicsMapResources != NULL); 285 286 return gst_cuda_vtable.CuGraphicsMapResources (count, resources, hStream); 287 } 288 289 CUresult CUDAAPI CuGraphicsUnmapResources(unsigned int count,CUgraphicsResource * resources,CUstream hStream)290 CuGraphicsUnmapResources (unsigned int count, CUgraphicsResource * resources, 291 CUstream hStream) 292 { 293 g_assert (gst_cuda_vtable.CuGraphicsUnmapResources != NULL); 294 295 return gst_cuda_vtable.CuGraphicsUnmapResources (count, resources, hStream); 296 } 297 298 CUresult CUDAAPI CuGraphicsSubResourceGetMappedArray(CUarray * pArray,CUgraphicsResource resource,unsigned int arrayIndex,unsigned int mipLevel)299 CuGraphicsSubResourceGetMappedArray (CUarray * pArray, 300 CUgraphicsResource resource, unsigned int arrayIndex, unsigned int mipLevel) 301 { 302 g_assert (gst_cuda_vtable.CuGraphicsSubResourceGetMappedArray != NULL); 303 304 return gst_cuda_vtable.CuGraphicsSubResourceGetMappedArray (pArray, resource, 305 arrayIndex, mipLevel); 306 } 307 308 CUresult CUDAAPI CuGraphicsResourceGetMappedPointer(CUdeviceptr * pDevPtr,size_t * pSize,CUgraphicsResource resource)309 CuGraphicsResourceGetMappedPointer (CUdeviceptr * pDevPtr, size_t * pSize, 310 CUgraphicsResource resource) 311 { 312 g_assert (gst_cuda_vtable.CuGraphicsResourceGetMappedPointer != NULL); 313 314 return gst_cuda_vtable.CuGraphicsResourceGetMappedPointer (pDevPtr, pSize, 315 resource); 316 } 317 318 CUresult CUDAAPI CuGraphicsUnregisterResource(CUgraphicsResource resource)319 CuGraphicsUnregisterResource (CUgraphicsResource resource) 320 { 321 g_assert (gst_cuda_vtable.CuGraphicsUnregisterResource != NULL); 322 323 return gst_cuda_vtable.CuGraphicsUnregisterResource (resource); 324 } 325 326 CUresult CUDAAPI CuMemAlloc(CUdeviceptr * dptr,unsigned int bytesize)327 CuMemAlloc (CUdeviceptr * dptr, unsigned int bytesize) 328 { 329 g_assert (gst_cuda_vtable.CuMemAlloc != NULL); 330 331 return gst_cuda_vtable.CuMemAlloc (dptr, bytesize); 332 } 333 334 CUresult CUDAAPI CuMemAllocPitch(CUdeviceptr * dptr,size_t * pPitch,size_t WidthInBytes,size_t Height,unsigned int ElementSizeBytes)335 CuMemAllocPitch (CUdeviceptr * dptr, size_t * pPitch, size_t WidthInBytes, 336 size_t Height, unsigned int ElementSizeBytes) 337 { 338 g_assert (gst_cuda_vtable.CuMemAllocPitch != NULL); 339 340 return gst_cuda_vtable.CuMemAllocPitch (dptr, pPitch, WidthInBytes, Height, 341 ElementSizeBytes); 342 } 343 344 CUresult CUDAAPI CuMemAllocHost(void ** pp,unsigned int bytesize)345 CuMemAllocHost (void **pp, unsigned int bytesize) 346 { 347 g_assert (gst_cuda_vtable.CuMemAllocHost != NULL); 348 349 return gst_cuda_vtable.CuMemAllocHost (pp, bytesize); 350 } 351 352 CUresult CUDAAPI CuMemcpy2D(const CUDA_MEMCPY2D * pCopy)353 CuMemcpy2D (const CUDA_MEMCPY2D * pCopy) 354 { 355 g_assert (gst_cuda_vtable.CuMemcpy2D != NULL); 356 357 return gst_cuda_vtable.CuMemcpy2D (pCopy); 358 } 359 360 CUresult CUDAAPI CuMemcpy2DAsync(const CUDA_MEMCPY2D * pCopy,CUstream hStream)361 CuMemcpy2DAsync (const CUDA_MEMCPY2D * pCopy, CUstream hStream) 362 { 363 g_assert (gst_cuda_vtable.CuMemcpy2DAsync != NULL); 364 365 return gst_cuda_vtable.CuMemcpy2DAsync (pCopy, hStream); 366 } 367 368 CUresult CUDAAPI CuMemFree(CUdeviceptr dptr)369 CuMemFree (CUdeviceptr dptr) 370 { 371 g_assert (gst_cuda_vtable.CuMemFree != NULL); 372 373 return gst_cuda_vtable.CuMemFree (dptr); 374 } 375 376 CUresult CUDAAPI CuMemFreeHost(void * p)377 CuMemFreeHost (void *p) 378 { 379 g_assert (gst_cuda_vtable.CuMemFreeHost != NULL); 380 381 return gst_cuda_vtable.CuMemFreeHost (p); 382 } 383 384 CUresult CUDAAPI CuStreamCreate(CUstream * phStream,unsigned int Flags)385 CuStreamCreate (CUstream * phStream, unsigned int Flags) 386 { 387 g_assert (gst_cuda_vtable.CuStreamCreate != NULL); 388 389 return gst_cuda_vtable.CuStreamCreate (phStream, Flags); 390 } 391 392 CUresult CUDAAPI CuStreamDestroy(CUstream hStream)393 CuStreamDestroy (CUstream hStream) 394 { 395 g_assert (gst_cuda_vtable.CuStreamDestroy != NULL); 396 397 return gst_cuda_vtable.CuStreamDestroy (hStream); 398 } 399 400 CUresult CUDAAPI CuStreamSynchronize(CUstream hStream)401 CuStreamSynchronize (CUstream hStream) 402 { 403 g_assert (gst_cuda_vtable.CuStreamSynchronize != NULL); 404 405 return gst_cuda_vtable.CuStreamSynchronize (hStream); 406 } 407 408 CUresult CUDAAPI CuDeviceGet(CUdevice * device,int ordinal)409 CuDeviceGet (CUdevice * device, int ordinal) 410 { 411 g_assert (gst_cuda_vtable.CuDeviceGet != NULL); 412 413 return gst_cuda_vtable.CuDeviceGet (device, ordinal); 414 } 415 416 CUresult CUDAAPI CuDeviceGetCount(int * count)417 CuDeviceGetCount (int *count) 418 { 419 g_assert (gst_cuda_vtable.CuDeviceGetCount != NULL); 420 421 return gst_cuda_vtable.CuDeviceGetCount (count); 422 } 423 424 CUresult CUDAAPI CuDeviceGetName(char * name,int len,CUdevice dev)425 CuDeviceGetName (char *name, int len, CUdevice dev) 426 { 427 g_assert (gst_cuda_vtable.CuDeviceGetName != NULL); 428 429 return gst_cuda_vtable.CuDeviceGetName (name, len, dev); 430 } 431 432 CUresult CUDAAPI CuDeviceGetAttribute(int * pi,CUdevice_attribute attrib,CUdevice dev)433 CuDeviceGetAttribute (int *pi, CUdevice_attribute attrib, CUdevice dev) 434 { 435 g_assert (gst_cuda_vtable.CuDeviceGetAttribute != NULL); 436 437 return gst_cuda_vtable.CuDeviceGetAttribute (pi, attrib, dev); 438 } 439 440 CUresult CUDAAPI CuDeviceCanAccessPeer(int * canAccessPeer,CUdevice dev,CUdevice peerDev)441 CuDeviceCanAccessPeer (int *canAccessPeer, CUdevice dev, CUdevice peerDev) 442 { 443 g_assert (gst_cuda_vtable.CuDeviceCanAccessPeer != NULL); 444 445 return gst_cuda_vtable.CuDeviceCanAccessPeer (canAccessPeer, dev, peerDev); 446 } 447 448 CUresult CUDAAPI CuDriverGetVersion(int * driverVersion)449 CuDriverGetVersion (int *driverVersion) 450 { 451 g_assert (gst_cuda_vtable.CuDriverGetVersion != NULL); 452 453 return gst_cuda_vtable.CuDriverGetVersion (driverVersion); 454 } 455 456 CUresult CUDAAPI CuModuleLoadData(CUmodule * module,const void * image)457 CuModuleLoadData (CUmodule * module, const void *image) 458 { 459 g_assert (gst_cuda_vtable.CuModuleLoadData != NULL); 460 461 return gst_cuda_vtable.CuModuleLoadData (module, image); 462 } 463 464 CUresult CUDAAPI CuModuleUnload(CUmodule module)465 CuModuleUnload (CUmodule module) 466 { 467 g_assert (gst_cuda_vtable.CuModuleUnload != NULL); 468 469 return gst_cuda_vtable.CuModuleUnload (module); 470 } 471 472 CUresult CUDAAPI CuModuleGetFunction(CUfunction * hfunc,CUmodule hmod,const char * name)473 CuModuleGetFunction (CUfunction * hfunc, CUmodule hmod, const char *name) 474 { 475 g_assert (gst_cuda_vtable.CuModuleGetFunction != NULL); 476 477 return gst_cuda_vtable.CuModuleGetFunction (hfunc, hmod, name); 478 } 479 480 CUresult CUDAAPI CuTexObjectCreate(CUtexObject * pTexObject,const CUDA_RESOURCE_DESC * pResDesc,const CUDA_TEXTURE_DESC * pTexDesc,const CUDA_RESOURCE_VIEW_DESC * pResViewDesc)481 CuTexObjectCreate (CUtexObject * pTexObject, 482 const CUDA_RESOURCE_DESC * pResDesc, const CUDA_TEXTURE_DESC * pTexDesc, 483 const CUDA_RESOURCE_VIEW_DESC * pResViewDesc) 484 { 485 g_assert (gst_cuda_vtable.CuTexObjectCreate != NULL); 486 487 return gst_cuda_vtable.CuTexObjectCreate (pTexObject, pResDesc, pTexDesc, 488 pResViewDesc); 489 } 490 491 CUresult CUDAAPI CuTexObjectDestroy(CUtexObject texObject)492 CuTexObjectDestroy (CUtexObject texObject) 493 { 494 g_assert (gst_cuda_vtable.CuTexObjectDestroy != NULL); 495 496 return gst_cuda_vtable.CuTexObjectDestroy (texObject); 497 } 498 499 CUresult CUDAAPI CuLaunchKernel(CUfunction f,unsigned int gridDimX,unsigned int gridDimY,unsigned int gridDimZ,unsigned int blockDimX,unsigned int blockDimY,unsigned int blockDimZ,unsigned int sharedMemBytes,CUstream hStream,void ** kernelParams,void ** extra)500 CuLaunchKernel (CUfunction f, unsigned int gridDimX, 501 unsigned int gridDimY, unsigned int gridDimZ, 502 unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, 503 unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, 504 void **extra) 505 { 506 g_assert (gst_cuda_vtable.CuLaunchKernel != NULL); 507 508 return gst_cuda_vtable.CuLaunchKernel (f, gridDimX, gridDimY, gridDimZ, 509 blockDimX, blockDimY, blockDimZ, sharedMemBytes, hStream, kernelParams, 510 extra); 511 } 512 513 /* cudaGL.h */ 514 CUresult CUDAAPI CuGraphicsGLRegisterImage(CUgraphicsResource * pCudaResource,unsigned int image,unsigned int target,unsigned int Flags)515 CuGraphicsGLRegisterImage (CUgraphicsResource * pCudaResource, 516 unsigned int image, unsigned int target, unsigned int Flags) 517 { 518 g_assert (gst_cuda_vtable.CuGraphicsGLRegisterImage != NULL); 519 520 return gst_cuda_vtable.CuGraphicsGLRegisterImage (pCudaResource, image, 521 target, Flags); 522 } 523 524 CUresult CUDAAPI CuGraphicsGLRegisterBuffer(CUgraphicsResource * pCudaResource,unsigned int buffer,unsigned int Flags)525 CuGraphicsGLRegisterBuffer (CUgraphicsResource * pCudaResource, 526 unsigned int buffer, unsigned int Flags) 527 { 528 g_assert (gst_cuda_vtable.CuGraphicsGLRegisterBuffer != NULL); 529 530 return gst_cuda_vtable.CuGraphicsGLRegisterBuffer (pCudaResource, buffer, 531 Flags); 532 } 533 534 CUresult CUDAAPI CuGraphicsResourceSetMapFlags(CUgraphicsResource resource,unsigned int flags)535 CuGraphicsResourceSetMapFlags (CUgraphicsResource resource, unsigned int flags) 536 { 537 g_assert (gst_cuda_vtable.CuGraphicsResourceSetMapFlags != NULL); 538 539 return gst_cuda_vtable.CuGraphicsResourceSetMapFlags (resource, flags); 540 } 541 542 CUresult CUDAAPI CuGLGetDevices(unsigned int * pCudaDeviceCount,CUdevice * pCudaDevices,unsigned int cudaDeviceCount,CUGLDeviceList deviceList)543 CuGLGetDevices (unsigned int *pCudaDeviceCount, CUdevice * pCudaDevices, 544 unsigned int cudaDeviceCount, CUGLDeviceList deviceList) 545 { 546 g_assert (gst_cuda_vtable.CuGLGetDevices != NULL); 547 548 return gst_cuda_vtable.CuGLGetDevices (pCudaDeviceCount, pCudaDevices, 549 cudaDeviceCount, deviceList); 550 } 551