Skip to content

Commit

Permalink
fix nvenc on win32:
Browse files Browse the repository at this point in the history
* use WinDLL to avoid calling convention error "called with not enough arguments"
* "libcuda.dll" is now "nvcuda.dll"..
* ship the cuda compiled kernels into a /CUDA directory

git-svn-id: https://xpra.org/svn/Xpra/trunk@9999 3bb7dfac-3a0b-4e04-842a-767bc560f471
  • Loading branch information
totaam committed Jul 22, 2015
1 parent e86e069 commit 7158243
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
6 changes: 4 additions & 2 deletions src/setup.py
Expand Up @@ -1926,8 +1926,10 @@ def cython_add(*args, **kwargs):
print(stdout or "")
print(stderr or "")
sys.exit(1)
add_data_files("share/xpra/cuda",
["xpra/codecs/cuda_common/%s.fatbin" % x for x in kernels])
CUDA_BIN = "share/xpra/cuda"
if WIN32:
CUDA_BIN = "CUDA"
add_data_files(CUDA_BIN, ["xpra/codecs/cuda_common/%s.fatbin" % x for x in kernels])
for nvenc_version, _nvenc_version_enabled in {4 : nvenc4_ENABLED,
5 : nvenc5_ENABLED}.items():
if not _nvenc_version_enabled:
Expand Down
3 changes: 2 additions & 1 deletion src/xpra/codecs/cuda_common/cuda_context.py
Expand Up @@ -105,7 +105,8 @@ def init_all_devices():
if i==0:
#we print the list info "header" from inside the loop
#so that the log output is bunched up together
log.info("CUDA %s / PyCUDA %s, found %s device(s):", ".".join([str(x) for x in driver.get_version()]), pycuda.VERSION_TEXT, ngpus)
log.info("CUDA %s / PyCUDA %s, found %s device%s:",
".".join([str(x) for x in driver.get_version()]), pycuda.VERSION_TEXT, ngpus, ["","s"][int(ngpus!=1)])
DEVICES.append(i)
log.info(" + %s (memory: %s%% free, compute: %s.%s)", device_info(device), 100*free/total, SMmajor, SMminor)
finally:
Expand Down
12 changes: 7 additions & 5 deletions src/xpra/codecs/nvenc4/encoder.pyx
Expand Up @@ -798,17 +798,19 @@ cuCtxGetCurrent = None
def init_nvencode_library():
global NvEncodeAPICreateInstance, cuCtxGetCurrent
IF NV_WINDOWS:
load = ctypes.WinDLL
nvenc_libname = "nvencodeapi.dll"
cuda_libname = "libcuda.dll"
cuda_libname = "nvcuda.dll"
ELSE:
#assert os.name=="posix"
load = ctypes.cdll.LoadLibrary
nvenc_libname = "libnvidia-encode.so"
cuda_libname = "libcuda.so"
#CUDA:
log("init_nvencode_library() will try to load %s", cuda_libname)
try:
x = ctypes.cdll.LoadLibrary(cuda_libname)
log("init_nvencode_library() %s=%s", cuda_libname, x)
x = load(cuda_libname)
log("init_nvencode_library() %s(%s)=%s", load, cuda_libname, x)
except Exception as e:
raise Exception("nvenc: the required library %s cannot be loaded: %s" % (cuda_libname, e))
cuCtxGetCurrent = x.cuCtxGetCurrent
Expand All @@ -818,8 +820,8 @@ def init_nvencode_library():
#nvidia-encode:
log("init_nvencode_library() will try to load %s", nvenc_libname)
try:
x = ctypes.cdll.LoadLibrary(nvenc_libname)
log("init_nvencode_library() %s=%s", nvenc_libname, x)
x = load(nvenc_libname)
log("init_nvencode_library() %s(%s)=%s", nvenc_libname, x)
except Exception as e:
raise Exception("nvenc: the required library %s cannot be loaded: %s" % (nvenc_libname, e))
NvEncodeAPICreateInstance = x.NvEncodeAPICreateInstance
Expand Down
12 changes: 7 additions & 5 deletions src/xpra/codecs/nvenc5/encoder.pyx
Expand Up @@ -795,17 +795,19 @@ cuCtxGetCurrent = None
def init_nvencode_library():
global NvEncodeAPICreateInstance, cuCtxGetCurrent
IF NV_WINDOWS:
load = ctypes.WinDLL
nvenc_libname = "nvencodeapi.dll"
cuda_libname = "libcuda.dll"
cuda_libname = "nvcuda.dll"
ELSE:
#assert os.name=="posix"
load = ctypes.cdll.LoadLibrary
nvenc_libname = "libnvidia-encode.so"
cuda_libname = "libcuda.so"
#CUDA:
log("init_nvencode_library() will try to load %s", cuda_libname)
try:
x = ctypes.cdll.LoadLibrary(cuda_libname)
log("init_nvencode_library() %s=%s", cuda_libname, x)
x = load(cuda_libname)
log("init_nvencode_library() %s(%s)=%s", load, cuda_libname, x)
except Exception as e:
raise Exception("nvenc: the required library %s cannot be loaded: %s" % (cuda_libname, e))
cuCtxGetCurrent = x.cuCtxGetCurrent
Expand All @@ -815,8 +817,8 @@ def init_nvencode_library():
#nvidia-encode:
log("init_nvencode_library() will try to load %s", nvenc_libname)
try:
x = ctypes.cdll.LoadLibrary(nvenc_libname)
log("init_nvencode_library() %s=%s", nvenc_libname, x)
x = load(nvenc_libname)
log("init_nvencode_library() %s(%s)=%s", load, nvenc_libname, x)
except Exception as e:
raise Exception("nvenc: the required library %s cannot be loaded: %s" % (nvenc_libname, e))
NvEncodeAPICreateInstance = x.NvEncodeAPICreateInstance
Expand Down

0 comments on commit 7158243

Please sign in to comment.