nvcuda-CUDA_Support: Add additional patch for functions added in CUDA 6.5

This commit is contained in:
Sebastian Lackner 2015-01-09 04:46:29 +01:00
parent e0a9d6cb9d
commit 09dbde3104
4 changed files with 204 additions and 10 deletions

View File

@ -0,0 +1,191 @@
From 4d10b5ffaadd216525cfef2d9c832a68268d8614 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
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

View File

@ -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?= <michael@fds-team.de>
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 @@

View File

@ -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 <sebastian@fds-team.de>
Date: Fri, 9 Jan 2015 03:44:39 +0100
Subject: nvcuda: Workaround for segmentation fault caused by missing callback

View File

@ -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