From d6563016ca1dae5a5b594a9f69d817ecaeb8594f Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Mon, 16 Dec 2024 17:31:17 +1100 Subject: [PATCH] cuda: add CuGet/SetCtxLimit() Part-of: --- girs/CudaGst-1.0.gir | 23 +++++++++++++++++++ .../gst-libs/gst/cuda/cuda-gst.h | 6 +++++ .../gst-libs/gst/cuda/gstcudaloader.cpp | 20 ++++++++++++++++ .../gst-libs/gst/cuda/stub/cuda.h | 14 +++++++++++ 4 files changed, 63 insertions(+) diff --git a/girs/CudaGst-1.0.gir b/girs/CudaGst-1.0.gir index 618a75650f..1618180087 100644 --- a/girs/CudaGst-1.0.gir +++ b/girs/CudaGst-1.0.gir @@ -621,6 +621,29 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/cuda-gst.h b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/cuda-gst.h index 9d295b4acc..0b60da275b 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/cuda-gst.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/cuda-gst.h @@ -45,6 +45,12 @@ CUresult CUDAAPI CuCtxPushCurrent (CUcontext ctx); GST_CUDA_API CUresult CUDAAPI CuCtxSynchronize (void); +GST_CUDA_API +CUresult CUDAAPI CuCtxGetLimit (size_t *plimit, CUlimit limit); + +GST_CUDA_API +CUresult CUDAAPI CuCtxSetLimit (CUlimit limit, size_t value); + GST_CUDA_API CUresult CUDAAPI CuCtxEnablePeerAccess (CUcontext peerContext, unsigned int Flags); diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/gstcudaloader.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/gstcudaloader.cpp index 711792b7f1..39b0f711f2 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/gstcudaloader.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/gstcudaloader.cpp @@ -76,6 +76,8 @@ typedef struct _GstNvCodecCudaVTable CUresult (CUDAAPI * CuCtxPopCurrent) (CUcontext * pctx); CUresult (CUDAAPI * CuCtxPushCurrent) (CUcontext ctx); CUresult (CUDAAPI * CuCtxSynchronize) (void); + CUresult (CUDAAPI * CuCtxGetLimit) (size_t * plimit, CUlimit limit); + CUresult (CUDAAPI * CuCtxSetLimit) (CUlimit limit, size_t value); CUresult (CUDAAPI * CuCtxEnablePeerAccess) (CUcontext peerContext, unsigned int Flags); @@ -354,6 +356,8 @@ gst_cuda_load_library_once_func (void) LOAD_SYMBOL (cuCtxPushCurrent, CuCtxPushCurrent); LOAD_SYMBOL (cuCtxEnablePeerAccess, CuCtxEnablePeerAccess); LOAD_SYMBOL (cuCtxDisablePeerAccess, CuCtxDisablePeerAccess); + LOAD_SYMBOL (cuCtxGetLimit, CuCtxGetLimit); + LOAD_SYMBOL (cuCtxSetLimit, CuCtxSetLimit); LOAD_SYMBOL (cuGraphicsMapResources, CuGraphicsMapResources); LOAD_SYMBOL (cuGraphicsUnmapResources, CuGraphicsUnmapResources); @@ -560,6 +564,22 @@ CuCtxDisablePeerAccess (CUcontext peerContext) return gst_cuda_vtable.CuCtxDisablePeerAccess (peerContext); } +CUresult CUDAAPI +CuCtxGetLimit (size_t *plimit, CUlimit limit) +{ + g_assert (gst_cuda_vtable.CuCtxGetLimit != nullptr); + + return gst_cuda_vtable.CuCtxGetLimit (plimit, limit); +} + +CUresult CUDAAPI +CuCtxSetLimit (CUlimit limit, size_t value) +{ + g_assert (gst_cuda_vtable.CuCtxSetLimit != nullptr); + + return gst_cuda_vtable.CuCtxSetLimit (limit, value); +} + CUresult CUDAAPI CuGraphicsMapResources (unsigned int count, CUgraphicsResource * resources, CUstream hStream) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/stub/cuda.h b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/stub/cuda.h index 290963286d..658147c3e2 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/stub/cuda.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/stub/cuda.h @@ -131,6 +131,20 @@ typedef enum CU_EVENT_INTERPROCESS = 0x4, } CUevent_flags; +typedef enum +{ + CU_LIMIT_STACK_SIZE = 0x0, + CU_LIMIT_PRINTF_FIFO_SIZE = 0x1, + CU_LIMIT_MALLOC_HEAP_SIZE = 0x2, + CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH = 0x3, + CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT = 0x4, + CU_LIMIT_MAX_L2_FETCH_GRANULARITY = 0x5, + CU_LIMIT_PERSISTING_L2_CACHE_SIZE = 0x6, + CU_LIMIT_SHMEM_SIZE = 0x7, + CU_LIMIT_CIG_ENABLED = 0x8, + CU_LIMIT_CIG_SHMEM_FALLBACK_ENABLED = 0x9, +} CUlimit; + typedef struct { gsize srcXInBytes;