diff options
author | Philip Langdale <philipl@overt.org> | 2017-05-29 09:48:10 -0700 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2017-06-03 16:41:03 +0200 |
commit | 7424651b9637082f71deab9fcc87111e2d9df13f (patch) | |
tree | e5d4813a3195e56d39bd313900a765bc69d9e40d /video/out/opengl/cuda_dynamic.h | |
parent | 7e889e5e637536cba3dfced3962ab87d7c8ea01f (diff) | |
download | mpv-7424651b9637082f71deab9fcc87111e2d9df13f.tar.bz2 mpv-7424651b9637082f71deab9fcc87111e2d9df13f.tar.xz |
vo_opengl: hwdec_cuda: Support separate decode and display devices
In a multi GPU scenario, it may be desirable to use different GPUs
for decode and display responsibilities. For example, if a secondary
GPU has better video decoding capabilities.
In such a scenario, we need to initialise a separate context for each
GPU, and use the display context in hwdec_cuda, while passing the
decode context to avcodec.
Once that's done, the actually hand-off between the two GPUs is
transparent to us (It happens during the cuMemcpy2D operation which
copies the decoded frame from a cuda buffer to the OpenGL texture).
In the end, the bulk of the work is around introducing a new
configuration option to specify the decode device.
Diffstat (limited to 'video/out/opengl/cuda_dynamic.h')
-rw-r--r-- | video/out/opengl/cuda_dynamic.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/video/out/opengl/cuda_dynamic.h b/video/out/opengl/cuda_dynamic.h index e1ffc6e8c1..9d75b31b7a 100644 --- a/video/out/opengl/cuda_dynamic.h +++ b/video/out/opengl/cuda_dynamic.h @@ -94,6 +94,7 @@ typedef CUresult CUDAAPI tcuCtxCreate_v2(CUcontext *pctx, unsigned int flags, CU typedef CUresult CUDAAPI tcuCtxPushCurrent_v2(CUcontext *pctx); typedef CUresult CUDAAPI tcuCtxPopCurrent_v2(CUcontext *pctx); typedef CUresult CUDAAPI tcuCtxDestroy_v2(CUcontext ctx); +typedef CUresult CUDAAPI tcuDeviceGet(CUdevice *pdevice, int ordinal); typedef CUresult CUDAAPI tcuMemcpy2D_v2(const CUDA_MEMCPY2D *pcopy); typedef CUresult CUDAAPI tcuGetErrorName(CUresult error, const char** pstr); typedef CUresult CUDAAPI tcuGetErrorString(CUresult error, const char** pstr); @@ -110,6 +111,7 @@ typedef CUresult CUDAAPI tcuGraphicsSubResourceGetMappedArray(CUarray* pArray, C FN(cuCtxPushCurrent_v2, tcuCtxPushCurrent_v2) \ FN(cuCtxPopCurrent_v2, tcuCtxPopCurrent_v2) \ FN(cuCtxDestroy_v2, tcuCtxDestroy_v2) \ + FN(cuDeviceGet, tcuDeviceGet) \ FN(cuMemcpy2D_v2, tcuMemcpy2D_v2) \ FN(cuGetErrorName, tcuGetErrorName) \ FN(cuGetErrorString, tcuGetErrorString) \ @@ -130,6 +132,7 @@ CUDA_FNS(CUDA_EXT_DECL) #define cuCtxPushCurrent mpv_cuCtxPushCurrent_v2 #define cuCtxPopCurrent mpv_cuCtxPopCurrent_v2 #define cuCtxDestroy mpv_cuCtxDestroy_v2 +#define cuDeviceGet mpv_cuDeviceGet #define cuMemcpy2D mpv_cuMemcpy2D_v2 #define cuGetErrorName mpv_cuGetErrorName #define cuGetErrorString mpv_cuGetErrorString |