From 09dbde31048425f47452e3501ba1cd421e6c5adc Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 9 Jan 2015 04:46:29 +0100 Subject: [PATCH] nvcuda-CUDA_Support: Add additional patch for functions added in CUDA 6.5 --- ...ment-new-functions-added-in-CUDA-6.5.patch | 191 ++++++++++++++++++ ...te-two-d3d9-initialization-functions.patch | 15 +- ...-for-segmentation-fault-caused-by-m.patch} | 2 +- patches/patchinstall.sh | 6 +- 4 files changed, 204 insertions(+), 10 deletions(-) create mode 100644 patches/nvcuda-CUDA_Support/0004-nvcuda-Implement-new-functions-added-in-CUDA-6.5.patch rename patches/nvcuda-CUDA_Support/{0004-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch => 0006-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch} (94%) diff --git a/patches/nvcuda-CUDA_Support/0004-nvcuda-Implement-new-functions-added-in-CUDA-6.5.patch b/patches/nvcuda-CUDA_Support/0004-nvcuda-Implement-new-functions-added-in-CUDA-6.5.patch new file mode 100644 index 00000000..ec168f2d --- /dev/null +++ b/patches/nvcuda-CUDA_Support/0004-nvcuda-Implement-new-functions-added-in-CUDA-6.5.patch @@ -0,0 +1,191 @@ +From 4d10b5ffaadd216525cfef2d9c832a68268d8614 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Fri, 9 Jan 2015 04:39:49 +0100 +Subject: nvcuda: Implement new functions added in CUDA 6.5. + +--- + dlls/nvcuda/nvcuda.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ + dlls/nvcuda/nvcuda.spec | 11 +++++ + include/cuda.h | 1 + + 3 files changed, 125 insertions(+) + +diff --git a/dlls/nvcuda/nvcuda.c b/dlls/nvcuda/nvcuda.c +index 5b9eed6..bd39547 100644 +--- a/dlls/nvcuda/nvcuda.c ++++ b/dlls/nvcuda/nvcuda.c +@@ -293,6 +293,20 @@ static CUresult (*pcuTexRefSetMipmapLevelBias)(CUtexref hTexRef, float bias); + static CUresult (*pcuTexRefSetMipmapLevelClamp)(CUtexref hTexRef, float minMipmapLevelClamp, float maxMipmapLevelClamp); + static CUresult (*pcuTexRefSetMipmappedArray)(CUtexref hTexRef, CUmipmappedArray hMipmappedArray, unsigned int Flags); + ++/* CUDA 6.5 */ ++static CUresult (*pcuGLGetDevices_v2)(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, ++ unsigned int cudaDeviceCount, CUGLDeviceList deviceList); ++static CUresult (*pcuGraphicsResourceSetMapFlags_v2)(CUgraphicsResource resource, unsigned int flags); ++static CUresult (*pcuLinkAddData_v2)(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name, ++ unsigned int numOptions, CUjit_option *options, void **optionValues); ++static CUresult (*pcuLinkCreate_v2)(unsigned int numOptions, CUjit_option *options, void **optionValues, CUlinkState *stateOut); ++static CUresult (*pcuMemHostRegister_v2)(void *p, size_t bytesize, unsigned int Flags); ++static CUresult (*pcuOccupancyMaxActiveBlocksPerMultiprocessor)(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize); ++/* ++static CUresult (*pcuOccupancyMaxPotentialBlockSize)(int *minGridSize, int *blockSize, CUfunction func, ++ void *blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit); ++*/ ++ + static void *cuda_handle = NULL; + + static BOOL load_functions(void) +@@ -306,6 +320,7 @@ static BOOL load_functions(void) + } + + #define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(cuda_handle, #f, NULL, 0)) == NULL){FIXME("Can't find symbol %s\n", #f); return FALSE;} ++ #define TRY_LOAD_FUNCPTR(f) p##f = wine_dlsym(cuda_handle, #f, NULL, 0) + + LOAD_FUNCPTR(cuArray3DCreate); + LOAD_FUNCPTR(cuArray3DCreate_v2); +@@ -554,7 +569,18 @@ static BOOL load_functions(void) + LOAD_FUNCPTR(cuTexRefSetMipmapLevelClamp); + LOAD_FUNCPTR(cuTexRefSetMipmappedArray); + ++ /* CUDA 6.5 */ ++ TRY_LOAD_FUNCPTR(cuGLGetDevices_v2); ++ TRY_LOAD_FUNCPTR(cuGraphicsResourceSetMapFlags_v2); ++ TRY_LOAD_FUNCPTR(cuLinkAddData_v2); ++ TRY_LOAD_FUNCPTR(cuLinkCreate_v2); ++ TRY_LOAD_FUNCPTR(cuMemHostRegister_v2); ++ TRY_LOAD_FUNCPTR(cuOccupancyMaxActiveBlocksPerMultiprocessor); ++ /* TRY_LOAD_FUNCPTR(cuOccupancyMaxPotentialBlockSize); */ ++ ++ + #undef LOAD_FUNCPTR ++ #undef TRY_LOAD_FUNCPTR + + return TRUE; + } +@@ -2101,6 +2127,93 @@ CUresult WINAPI wine_cuTexRefSetMipmappedArray(CUtexref hTexRef, CUmipmappedArra + return pcuTexRefSetMipmappedArray(hTexRef, hMipmappedArray, Flags); + } + ++/* ++ * Additions in CUDA 6.5 ++ */ ++ ++CUresult WINAPI wine_cuGLGetDevices_v2(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, ++ unsigned int cudaDeviceCount, CUGLDeviceList deviceList) ++{ ++ TRACE("(%p, %p, %u, %d)\n", pCudaDeviceCount, pCudaDevices, cudaDeviceCount, deviceList); ++ if (!pcuGLGetDevices_v2) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuGLGetDevices_v2(pCudaDeviceCount, pCudaDevices, cudaDeviceCount, deviceList); ++} ++ ++CUresult WINAPI wine_cuGraphicsResourceSetMapFlags_v2(CUgraphicsResource resource, unsigned int flags) ++{ ++ TRACE("(%p, %u)\n", resource, flags); ++ if (!pcuGraphicsResourceSetMapFlags_v2) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuGraphicsResourceSetMapFlags_v2(resource, flags); ++} ++ ++CUresult WINAPI wine_cuLinkAddData_v2(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name, ++ unsigned int numOptions, CUjit_option *options, void **optionValues) ++{ ++ TRACE("(%p, %d, %p, %lu, %s, %u, %p, %p)\n", state, type, data, (SIZE_T)size, name, numOptions, options, optionValues); ++ if (!pcuLinkAddData_v2) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuLinkAddData_v2(state, type, data, size, name, numOptions, options, optionValues); ++} ++ ++CUresult WINAPI wine_cuLinkCreate_v2(unsigned int numOptions, CUjit_option *options, ++ void **optionValues, CUlinkState *stateOut) ++{ ++ TRACE("(%u, %p, %p, %p)\n", numOptions, options, optionValues, stateOut); ++ if (!pcuLinkCreate_v2) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuLinkCreate_v2(numOptions, options, optionValues, stateOut); ++} ++ ++CUresult WINAPI wine_cuMemHostRegister_v2(void *p, size_t bytesize, unsigned int Flags) ++{ ++ TRACE("(%p, %lu, %u)\n", p, (SIZE_T)bytesize, Flags); ++ if (!pcuMemHostRegister_v2) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuMemHostRegister_v2(p, bytesize, Flags); ++} ++ ++CUresult WINAPI wine_cuOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize) ++{ ++ TRACE("(%p, %p, %d, %lu)\n", numBlocks, func, blockSize, (SIZE_T)dynamicSMemSize); ++ if (!pcuOccupancyMaxActiveBlocksPerMultiprocessor) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuOccupancyMaxActiveBlocksPerMultiprocessor(numBlocks, func, blockSize, dynamicSMemSize); ++} ++ ++/* ++CUresult WINAPI wine_cuOccupancyMaxPotentialBlockSize(int *minGridSize, int *blockSize, CUfunction func, ++ void *blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit) ++{ ++ TRACE("(%p, %p, %p, %p, %lu, %d)\n", minGridSize, blockSize, func, blockSizeToDynamicSMemSize, (SIZE_T)dynamicSMemSize, blockSizeLimit); ++ if (!pcuOccupancyMaxPotentialBlockSize) ++ { ++ FIXME("not supported\n"); ++ return CUDA_ERROR_NOT_SUPPORTED; ++ } ++ return pcuOccupancyMaxPotentialBlockSize(minGridSize, blockSize, func, blockSizeToDynamicSMemSize, dynamicSMemSize, blockSizeLimit); ++} ++*/ ++ + BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) + { + TRACE("(%p, %u, %p)\n", instance, reason, reserved); +diff --git a/dlls/nvcuda/nvcuda.spec b/dlls/nvcuda/nvcuda.spec +index 621b8d5..c23faa4 100644 +--- a/dlls/nvcuda/nvcuda.spec ++++ b/dlls/nvcuda/nvcuda.spec +@@ -306,3 +306,14 @@ + @ stdcall cuTexRefSetMipmapLevelClamp(ptr float float) wine_cuTexRefSetMipmapLevelClamp + @ stdcall cuTexRefSetMipmappedArray(ptr ptr long) wine_cuTexRefSetMipmappedArray + @ stub cuWGLGetDevice ++ ++# CUDA 6.5 ++@ stdcall cuGLGetDevices_v2(ptr ptr long long) wine_cuGLGetDevices_v2 ++@ stdcall cuGraphicsResourceSetMapFlags_v2(ptr long) wine_cuGraphicsResourceSetMapFlags_v2 ++@ stdcall cuLinkAddData_v2(ptr long ptr long str long ptr ptr) wine_cuLinkAddData_v2 ++@ stub cuLinkAddFile_v2 ++@ stdcall cuLinkCreate_v2(long ptr ptr ptr) wine_cuLinkCreate_v2 ++@ stdcall cuMemHostRegister_v2(ptr long long) wine_cuMemHostRegister_v2 ++@ stdcall cuOccupancyMaxActiveBlocksPerMultiprocessor(ptr ptr long long) wine_cuOccupancyMaxActiveBlocksPerMultiprocessor ++@ stub cuOccupancyMaxPotentialBlockSize ++#@ stdcall cuOccupancyMaxPotentialBlockSize(ptr ptr ptr ptr long long) wine_cuOccupancyMaxPotentialBlockSize +diff --git a/include/cuda.h b/include/cuda.h +index 1f20f5b..0f7b11d 100644 +--- a/include/cuda.h ++++ b/include/cuda.h +@@ -22,6 +22,7 @@ + #define CUDA_SUCCESS 0 + #define CUDA_ERROR_INVALID_VALUE 1 + #define CUDA_ERROR_OUT_OF_MEMORY 2 ++#define CUDA_ERROR_NOT_SUPPORTED 801 + #define CUDA_ERROR_UNKNOWN 999 + + #define CU_IPC_HANDLE_SIZE 64 +-- +2.2.1 + diff --git a/patches/nvcuda-CUDA_Support/0005-nvcuda-Emulate-two-d3d9-initialization-functions.patch b/patches/nvcuda-CUDA_Support/0005-nvcuda-Emulate-two-d3d9-initialization-functions.patch index 76df0f15..9cf9064a 100644 --- a/patches/nvcuda-CUDA_Support/0005-nvcuda-Emulate-two-d3d9-initialization-functions.patch +++ b/patches/nvcuda-CUDA_Support/0005-nvcuda-Emulate-two-d3d9-initialization-functions.patch @@ -1,15 +1,15 @@ -From 5aa66ddfe07ae62f845815bf0b7edfbe3baff883 Mon Sep 17 00:00:00 2001 +From fec925b4517cc16ac478927a361a3260a917a898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 3 Jan 2015 00:25:08 +0100 Subject: nvcuda: Emulate two d3d9 initialization functions. --- - dlls/nvcuda/nvcuda.c | 29 +++++++++++++++++++++++++++++ + dlls/nvcuda/nvcuda.c | 30 ++++++++++++++++++++++++++++++ dlls/nvcuda/nvcuda.spec | 4 ++-- - 2 files changed, 31 insertions(+), 2 deletions(-) + 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/dlls/nvcuda/nvcuda.c b/dlls/nvcuda/nvcuda.c -index 8c134cb..3ccf54a 100644 +index bd39547..826c30b 100644 --- a/dlls/nvcuda/nvcuda.c +++ b/dlls/nvcuda/nvcuda.c @@ -29,6 +29,7 @@ @@ -20,13 +20,14 @@ index 8c134cb..3ccf54a 100644 #if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) #define DEV_PTR "%llu" -@@ -2101,6 +2102,34 @@ CUresult WINAPI wine_cuTexRefSetMipmappedArray(CUtexref hTexRef, CUmipmappedArra - return pcuTexRefSetMipmappedArray(hTexRef, hMipmappedArray, Flags); +@@ -2214,6 +2215,35 @@ CUresult WINAPI wine_cuOccupancyMaxPotentialBlockSize(int *minGridSize, int *blo } + */ +/* + * Direct3D emulated functions + */ ++ +CUresult WINAPI wine_cuD3D9CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, IDirect3DDevice9 *pD3DDevice) +{ + CUresult ret; @@ -56,7 +57,7 @@ index 8c134cb..3ccf54a 100644 { TRACE("(%p, %u, %p)\n", instance, reason, reserved); diff --git a/dlls/nvcuda/nvcuda.spec b/dlls/nvcuda/nvcuda.spec -index 621b8d5..510280c 100644 +index c23faa4..5ca921e 100644 --- a/dlls/nvcuda/nvcuda.spec +++ b/dlls/nvcuda/nvcuda.spec @@ -58,11 +58,11 @@ diff --git a/patches/nvcuda-CUDA_Support/0004-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch b/patches/nvcuda-CUDA_Support/0006-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch similarity index 94% rename from patches/nvcuda-CUDA_Support/0004-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch rename to patches/nvcuda-CUDA_Support/0006-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch index d9f75e7a..77dc52a2 100644 --- a/patches/nvcuda-CUDA_Support/0004-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch +++ b/patches/nvcuda-CUDA_Support/0006-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch @@ -1,4 +1,4 @@ -From 8a399c4a4558e141c8cabf940a3ddbdbb238acd5 Mon Sep 17 00:00:00 2001 +From af3adabd17da448810f2daa67994e664c7418d52 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 9 Jan 2015 03:44:39 +0100 Subject: nvcuda: Workaround for segmentation fault caused by missing callback diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 80abbc6b..a54683a0 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -2090,14 +2090,16 @@ if [ "$enable_nvcuda_CUDA_Support" -eq 1 ]; then patch_apply nvcuda-CUDA_Support/0001-include-Add-cuda.h.h.patch patch_apply nvcuda-CUDA_Support/0002-nvcuda-Add-stub-dll.patch patch_apply nvcuda-CUDA_Support/0003-nvcuda-First-implementation.patch - patch_apply nvcuda-CUDA_Support/0004-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch + patch_apply nvcuda-CUDA_Support/0004-nvcuda-Implement-new-functions-added-in-CUDA-6.5.patch patch_apply nvcuda-CUDA_Support/0005-nvcuda-Emulate-two-d3d9-initialization-functions.patch + patch_apply nvcuda-CUDA_Support/0006-nvcuda-Workaround-for-segmentation-fault-caused-by-m.patch ( echo '+ { "Sebastian Lackner", "include: Add cuda.h.h.", 1 },'; echo '+ { "Sebastian Lackner", "nvcuda: Add stub dll.", 1 },'; echo '+ { "Michael Müller", "nvcuda: First implementation.", 1 },'; - echo '+ { "Sebastian Lackner", "nvcuda: Workaround for segmentation fault caused by missing callback relay.", 1 },'; + echo '+ { "Sebastian Lackner", "nvcuda: Implement new functions added in CUDA 6.5.", 1 },'; echo '+ { "Michael Müller", "nvcuda: Emulate two d3d9 initialization functions.", 1 },'; + echo '+ { "Sebastian Lackner", "nvcuda: Workaround for segmentation fault caused by missing callback relay.", 1 },'; ) >> "$patchlist" fi