Cycles: svn merge -r41225:41232 ^/trunk/blender
[blender.git] / intern / cycles / util / util_cuda.h
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18
19 #ifndef __UTIL_CUDA_H__
20 #define __UTIL_CUDA_H__
21
22 #include <stdlib.h>
23 #include "util_opengl.h"
24 #include "util_string.h"
25
26 CCL_NAMESPACE_BEGIN
27
28 /* CUDA is linked in dynamically at runtime, so we can start the application
29  * without requiring a CUDA installation. Code adapted from the example
30  * matrixMulDynlinkJIT in the CUDA SDK. */
31
32 bool cuLibraryInit();
33 string cuCompilerPath();
34
35 CCL_NAMESPACE_END
36
37 /* defines, structs, enums */
38
39 #define CUDA_VERSION 3020
40
41 #if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64)
42 typedef unsigned long long CUdeviceptr;
43 #else
44 typedef unsigned int CUdeviceptr;
45 #endif
46
47 typedef int CUdevice;
48 typedef struct CUctx_st *CUcontext;
49 typedef struct CUmod_st *CUmodule;
50 typedef struct CUfunc_st *CUfunction;
51 typedef struct CUarray_st *CUarray;
52 typedef struct CUtexref_st *CUtexref;
53 typedef struct CUsurfref_st *CUsurfref;
54 typedef struct CUevent_st *CUevent;
55 typedef struct CUstream_st *CUstream;
56 typedef struct CUgraphicsResource_st *CUgraphicsResource;
57
58 typedef struct CUuuid_st {
59     char bytes[16];
60 } CUuuid;
61
62 typedef enum CUctx_flags_enum {
63     CU_CTX_SCHED_AUTO  = 0,
64     CU_CTX_SCHED_SPIN  = 1,
65     CU_CTX_SCHED_YIELD = 2,
66     CU_CTX_SCHED_MASK  = 0x3,
67     CU_CTX_BLOCKING_SYNC = 4,
68     CU_CTX_MAP_HOST = 8,
69     CU_CTX_LMEM_RESIZE_TO_MAX = 16,
70     CU_CTX_FLAGS_MASK  = 0x1f
71 } CUctx_flags;
72
73 typedef enum CUevent_flags_enum {
74     CU_EVENT_DEFAULT        = 0,
75     CU_EVENT_BLOCKING_SYNC  = 1,
76     CU_EVENT_DISABLE_TIMING = 2
77 } CUevent_flags;
78
79 typedef enum CUarray_format_enum {
80     CU_AD_FORMAT_UNSIGNED_INT8  = 0x01,
81     CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
82     CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
83     CU_AD_FORMAT_SIGNED_INT8    = 0x08,
84     CU_AD_FORMAT_SIGNED_INT16   = 0x09,
85     CU_AD_FORMAT_SIGNED_INT32   = 0x0a,
86     CU_AD_FORMAT_HALF           = 0x10,
87     CU_AD_FORMAT_FLOAT          = 0x20
88 } CUarray_format;
89
90 typedef enum CUaddress_mode_enum {
91     CU_TR_ADDRESS_MODE_WRAP   = 0,
92     CU_TR_ADDRESS_MODE_CLAMP  = 1,
93     CU_TR_ADDRESS_MODE_MIRROR = 2,
94     CU_TR_ADDRESS_MODE_BORDER = 3
95 } CUaddress_mode;
96
97 typedef enum CUfilter_mode_enum {
98     CU_TR_FILTER_MODE_POINT  = 0,
99     CU_TR_FILTER_MODE_LINEAR = 1
100 } CUfilter_mode;
101
102 typedef enum CUdevice_attribute_enum {
103     CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1,
104     CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X = 2,
105     CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y = 3,
106     CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z = 4,
107     CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X = 5,
108     CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y = 6,
109     CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z = 7,
110     CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK = 8,
111     CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK = 8,
112     CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY = 9,
113     CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10,
114     CU_DEVICE_ATTRIBUTE_MAX_PITCH = 11,
115     CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12,
116     CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK = 12,
117     CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13,
118     CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT = 14,
119     CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15,
120     CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16,
121     CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT = 17,
122     CU_DEVICE_ATTRIBUTE_INTEGRATED = 18,
123     CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19,
124     CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20,
125     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH = 21,
126     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH = 22,
127     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT = 23,
128     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH = 24,
129     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT = 25,
130     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH = 26,
131     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH = 27,
132     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT = 28,
133     CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES = 29,
134     CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT = 30,
135     CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31,
136     CU_DEVICE_ATTRIBUTE_ECC_ENABLED = 32,
137     CU_DEVICE_ATTRIBUTE_PCI_BUS_ID = 33,
138     CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID = 34,
139     CU_DEVICE_ATTRIBUTE_TCC_DRIVER = 35
140 } CUdevice_attribute;
141
142 typedef struct CUdevprop_st {
143     int maxThreadsPerBlock;
144     int maxThreadsDim[3];
145     int maxGridSize[3];
146     int sharedMemPerBlock;
147     int totalConstantMemory;
148     int SIMDWidth;
149     int memPitch;
150     int regsPerBlock;
151     int clockRate;
152     int textureAlign;
153 } CUdevprop;
154
155 typedef enum CUfunction_attribute_enum {
156     CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0,
157     CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES = 1,
158     CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES = 2,
159     CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES = 3,
160     CU_FUNC_ATTRIBUTE_NUM_REGS = 4,
161     CU_FUNC_ATTRIBUTE_PTX_VERSION = 5,
162     CU_FUNC_ATTRIBUTE_BINARY_VERSION = 6,
163     CU_FUNC_ATTRIBUTE_MAX
164 } CUfunction_attribute;
165
166 typedef enum CUfunc_cache_enum {
167     CU_FUNC_CACHE_PREFER_NONE    = 0x00,
168     CU_FUNC_CACHE_PREFER_SHARED  = 0x01,
169     CU_FUNC_CACHE_PREFER_L1      = 0x02
170 } CUfunc_cache;
171
172 typedef enum CUmemorytype_enum {
173     CU_MEMORYTYPE_HOST   = 0x01,
174     CU_MEMORYTYPE_DEVICE = 0x02,
175     CU_MEMORYTYPE_ARRAY  = 0x03
176 } CUmemorytype;
177
178 typedef enum CUcomputemode_enum {
179     CU_COMPUTEMODE_DEFAULT    = 0,
180     CU_COMPUTEMODE_EXCLUSIVE  = 1,
181     CU_COMPUTEMODE_PROHIBITED = 2
182 } CUcomputemode;
183
184 typedef enum CUjit_option_enum
185 {
186     CU_JIT_MAX_REGISTERS = 0,
187     CU_JIT_THREADS_PER_BLOCK,
188     CU_JIT_WALL_TIME,
189     CU_JIT_INFO_LOG_BUFFER,
190     CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES,
191     CU_JIT_ERROR_LOG_BUFFER,
192     CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES,
193     CU_JIT_OPTIMIZATION_LEVEL,
194     CU_JIT_TARGET_FROM_CUCONTEXT,
195     CU_JIT_TARGET,
196     CU_JIT_FALLBACK_STRATEGY
197
198 } CUjit_option;
199
200 typedef enum CUjit_target_enum
201 {
202     CU_TARGET_COMPUTE_10 = 0,
203     CU_TARGET_COMPUTE_11,
204     CU_TARGET_COMPUTE_12,
205     CU_TARGET_COMPUTE_13,
206     CU_TARGET_COMPUTE_20,
207     CU_TARGET_COMPUTE_21
208 } CUjit_target;
209
210 typedef enum CUjit_fallback_enum
211 {
212     CU_PREFER_PTX = 0,
213     CU_PREFER_BINARY
214
215 } CUjit_fallback;
216
217 typedef enum CUgraphicsRegisterFlags_enum {
218     CU_GRAPHICS_REGISTER_FLAGS_NONE  = 0x00
219 } CUgraphicsRegisterFlags;
220
221 typedef enum CUgraphicsMapResourceFlags_enum {
222     CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE          = 0x00,
223     CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY     = 0x01,
224     CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02
225 } CUgraphicsMapResourceFlags;
226
227 typedef enum CUarray_cubemap_face_enum {
228     CU_CUBEMAP_FACE_POSITIVE_X  = 0x00,
229     CU_CUBEMAP_FACE_NEGATIVE_X  = 0x01,
230     CU_CUBEMAP_FACE_POSITIVE_Y  = 0x02,
231     CU_CUBEMAP_FACE_NEGATIVE_Y  = 0x03,
232     CU_CUBEMAP_FACE_POSITIVE_Z  = 0x04,
233     CU_CUBEMAP_FACE_NEGATIVE_Z  = 0x05
234 } CUarray_cubemap_face;
235
236 typedef enum CUlimit_enum {
237     CU_LIMIT_STACK_SIZE        = 0x00,
238     CU_LIMIT_PRINTF_FIFO_SIZE  = 0x01,
239     CU_LIMIT_MALLOC_HEAP_SIZE  = 0x02
240 } CUlimit;
241
242 typedef enum cudaError_enum {
243     CUDA_SUCCESS                              = 0,
244     CUDA_ERROR_INVALID_VALUE                  = 1,
245     CUDA_ERROR_OUT_OF_MEMORY                  = 2,
246     CUDA_ERROR_NOT_INITIALIZED                = 3,
247     CUDA_ERROR_DEINITIALIZED                  = 4,
248     CUDA_ERROR_NO_DEVICE                      = 100,
249     CUDA_ERROR_INVALID_DEVICE                 = 101,
250     CUDA_ERROR_INVALID_IMAGE                  = 200,
251     CUDA_ERROR_INVALID_CONTEXT                = 201,
252     CUDA_ERROR_CONTEXT_ALREADY_CURRENT        = 202,
253     CUDA_ERROR_MAP_FAILED                     = 205,
254     CUDA_ERROR_UNMAP_FAILED                   = 206,
255     CUDA_ERROR_ARRAY_IS_MAPPED                = 207,
256     CUDA_ERROR_ALREADY_MAPPED                 = 208,
257     CUDA_ERROR_NO_BINARY_FOR_GPU              = 209,
258     CUDA_ERROR_ALREADY_ACQUIRED               = 210,
259     CUDA_ERROR_NOT_MAPPED                     = 211,
260     CUDA_ERROR_NOT_MAPPED_AS_ARRAY            = 212,
261     CUDA_ERROR_NOT_MAPPED_AS_POINTER          = 213,
262     CUDA_ERROR_ECC_UNCORRECTABLE              = 214,
263     CUDA_ERROR_UNSUPPORTED_LIMIT              = 215,
264     CUDA_ERROR_INVALID_SOURCE                 = 300,
265     CUDA_ERROR_FILE_NOT_FOUND                 = 301,
266     CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND = 302,
267     CUDA_ERROR_SHARED_OBJECT_INIT_FAILED      = 303,
268     CUDA_ERROR_OPERATING_SYSTEM               = 304,
269     CUDA_ERROR_INVALID_HANDLE                 = 400,
270     CUDA_ERROR_NOT_FOUND                      = 500,
271     CUDA_ERROR_NOT_READY                      = 600,
272     CUDA_ERROR_LAUNCH_FAILED                  = 700,
273     CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES        = 701,
274     CUDA_ERROR_LAUNCH_TIMEOUT                 = 702,
275     CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING  = 703,
276     CUDA_ERROR_UNKNOWN                        = 999
277 } CUresult;
278
279 #define CU_MEMHOSTALLOC_PORTABLE        0x01
280 #define CU_MEMHOSTALLOC_DEVICEMAP       0x02
281 #define CU_MEMHOSTALLOC_WRITECOMBINED   0x04
282
283 typedef struct CUDA_MEMCPY2D_st {
284     size_t srcXInBytes;
285     size_t srcY;
286
287     CUmemorytype srcMemoryType;
288     const void *srcHost;
289     CUdeviceptr srcDevice;
290     CUarray srcArray;
291     size_t srcPitch;
292
293     size_t dstXInBytes;
294     size_t dstY;
295
296     CUmemorytype dstMemoryType;
297     void *dstHost;
298     CUdeviceptr dstDevice;
299     CUarray dstArray;
300     size_t dstPitch;
301
302     size_t WidthInBytes;
303     size_t Height;
304 } CUDA_MEMCPY2D;
305
306 typedef struct CUDA_MEMCPY3D_st {
307     size_t srcXInBytes;
308     size_t srcY;
309     size_t srcZ;
310     size_t srcLOD;
311     CUmemorytype srcMemoryType;
312     const void *srcHost;
313     CUdeviceptr srcDevice;
314     CUarray srcArray;
315     void *reserved0;
316     size_t srcPitch;
317     size_t srcHeight;
318
319     size_t dstXInBytes;
320     size_t dstY;
321     size_t dstZ;
322     size_t dstLOD;
323     CUmemorytype dstMemoryType;
324     void *dstHost;
325     CUdeviceptr dstDevice;
326     CUarray dstArray;
327     void *reserved1;
328     size_t dstPitch;
329     size_t dstHeight;
330
331     size_t WidthInBytes;
332     size_t Height;
333     size_t Depth;
334 } CUDA_MEMCPY3D;
335
336 typedef struct CUDA_ARRAY_DESCRIPTOR_st
337 {
338     size_t Width;
339     size_t Height;
340
341     CUarray_format Format;
342     unsigned int NumChannels;
343 } CUDA_ARRAY_DESCRIPTOR;
344
345 typedef struct CUDA_ARRAY3D_DESCRIPTOR_st
346 {
347     size_t Width;
348     size_t Height;
349     size_t Depth;
350
351     CUarray_format Format;
352     unsigned int NumChannels;
353     unsigned int Flags;
354 } CUDA_ARRAY3D_DESCRIPTOR;
355
356 #define CUDA_ARRAY3D_2DARRAY        0x01
357 #define CUDA_ARRAY3D_SURFACE_LDST   0x02
358 #define CU_TRSA_OVERRIDE_FORMAT 0x01
359 #define CU_TRSF_READ_AS_INTEGER         0x01
360 #define CU_TRSF_NORMALIZED_COORDINATES  0x02
361 #define CU_TRSF_SRGB  0x10
362 #define CU_PARAM_TR_DEFAULT -1
363
364 #ifdef _WIN32
365 #define CUDAAPI __stdcall
366 #else
367 #define CUDAAPI
368 #endif
369
370 /* function types */
371
372 typedef CUresult CUDAAPI tcuInit(unsigned int Flags);
373 typedef CUresult CUDAAPI tcuDriverGetVersion(int *driverVersion);
374 typedef CUresult CUDAAPI tcuDeviceGet(CUdevice *device, int ordinal);
375 typedef CUresult CUDAAPI tcuDeviceGetCount(int *count);
376 typedef CUresult CUDAAPI tcuDeviceGetName(char *name, int len, CUdevice dev);
377 typedef CUresult CUDAAPI tcuDeviceComputeCapability(int *major, int *minor, CUdevice dev);
378 typedef CUresult CUDAAPI tcuDeviceTotalMem(size_t *bytes, CUdevice dev);
379 typedef CUresult CUDAAPI tcuDeviceGetProperties(CUdevprop *prop, CUdevice dev);
380 typedef CUresult CUDAAPI tcuDeviceGetAttribute(int *pi, CUdevice_attribute attrib, CUdevice dev);
381 typedef CUresult CUDAAPI tcuCtxCreate(CUcontext *pctx, unsigned int flags, CUdevice dev);
382 typedef CUresult CUDAAPI tcuCtxDestroy(CUcontext ctx);
383 typedef CUresult CUDAAPI tcuCtxAttach(CUcontext *pctx, unsigned int flags);
384 typedef CUresult CUDAAPI tcuCtxDetach(CUcontext ctx);
385 typedef CUresult CUDAAPI tcuCtxPushCurrent(CUcontext ctx );
386 typedef CUresult CUDAAPI tcuCtxPopCurrent(CUcontext *pctx);
387 typedef CUresult CUDAAPI tcuCtxGetDevice(CUdevice *device);
388 typedef CUresult CUDAAPI tcuCtxSynchronize(void);
389 typedef CUresult CUDAAPI tcuCtxSetLimit(CUlimit limit, size_t value);
390 typedef CUresult CUDAAPI tcuCtxGetLimit(size_t *pvalue, CUlimit limit);
391 typedef CUresult CUDAAPI tcuCtxGetCacheConfig(CUfunc_cache *pconfig);
392 typedef CUresult CUDAAPI tcuCtxSetCacheConfig(CUfunc_cache config);
393 typedef CUresult CUDAAPI tcuCtxGetApiVersion(CUcontext ctx, unsigned int *version);
394 typedef CUresult CUDAAPI tcuModuleLoad(CUmodule *module, const char *fname);
395 typedef CUresult CUDAAPI tcuModuleLoadData(CUmodule *module, const void *image);
396 typedef CUresult CUDAAPI tcuModuleLoadDataEx(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
397 typedef CUresult CUDAAPI tcuModuleLoadFatBinary(CUmodule *module, const void *fatCubin);
398 typedef CUresult CUDAAPI tcuModuleUnload(CUmodule hmod);
399 typedef CUresult CUDAAPI tcuModuleGetFunction(CUfunction *hfunc, CUmodule hmod, const char *name);
400 typedef CUresult CUDAAPI tcuModuleGetGlobal(CUdeviceptr *dptr, size_t *bytes, CUmodule hmod, const char *name);
401 typedef CUresult CUDAAPI tcuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const char *name);
402 typedef CUresult CUDAAPI tcuModuleGetSurfRef(CUsurfref *pSurfRef, CUmodule hmod, const char *name);
403 typedef CUresult CUDAAPI tcuMemGetInfo(size_t *free, size_t *total);
404 typedef CUresult CUDAAPI tcuMemAlloc(CUdeviceptr *dptr, size_t bytesize);
405 typedef CUresult CUDAAPI tcuMemAllocPitch(CUdeviceptr *dptr, size_t *pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes);
406 typedef CUresult CUDAAPI tcuMemFree(CUdeviceptr dptr);
407 typedef CUresult CUDAAPI tcuMemGetAddressRange(CUdeviceptr *pbase, size_t *psize, CUdeviceptr dptr);
408 typedef CUresult CUDAAPI tcuMemAllocHost(void **pp, size_t bytesize);
409 typedef CUresult CUDAAPI tcuMemFreeHost(void *p);
410 typedef CUresult CUDAAPI tcuMemHostAlloc(void **pp, size_t bytesize, unsigned int Flags);
411 typedef CUresult CUDAAPI tcuMemHostGetDevicePointer(CUdeviceptr *pdptr, void *p, unsigned int Flags);
412 typedef CUresult CUDAAPI tcuMemHostGetFlags(unsigned int *pFlags, void *p);
413 typedef CUresult CUDAAPI tcuMemcpyHtoD(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount);
414 typedef CUresult CUDAAPI tcuMemcpyDtoH(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount);
415 typedef CUresult CUDAAPI tcuMemcpyDtoD(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount);
416 typedef CUresult CUDAAPI tcuMemcpyDtoA(CUarray dstArray, size_t dstOffset, CUdeviceptr srcDevice, size_t ByteCount);
417 typedef CUresult CUDAAPI tcuMemcpyAtoD(CUdeviceptr dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
418 typedef CUresult CUDAAPI tcuMemcpyHtoA(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
419 typedef CUresult CUDAAPI tcuMemcpyAtoH(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
420 typedef CUresult CUDAAPI tcuMemcpyAtoA(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
421 typedef CUresult CUDAAPI tcuMemcpy2D(const CUDA_MEMCPY2D *pCopy);
422 typedef CUresult CUDAAPI tcuMemcpy2DUnaligned(const CUDA_MEMCPY2D *pCopy);
423 typedef CUresult CUDAAPI tcuMemcpy3D(const CUDA_MEMCPY3D *pCopy);
424 typedef CUresult CUDAAPI tcuMemcpyHtoDAsync(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount, CUstream hStream);
425 typedef CUresult CUDAAPI tcuMemcpyDtoHAsync(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
426 typedef CUresult CUDAAPI tcuMemcpyDtoDAsync(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
427 typedef CUresult CUDAAPI tcuMemcpyHtoAAsync(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount, CUstream hStream);
428 typedef CUresult CUDAAPI tcuMemcpyAtoHAsync(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount, CUstream hStream);
429 typedef CUresult CUDAAPI tcuMemcpy2DAsync(const CUDA_MEMCPY2D *pCopy, CUstream hStream);
430 typedef CUresult CUDAAPI tcuMemcpy3DAsync(const CUDA_MEMCPY3D *pCopy, CUstream hStream);
431 typedef CUresult CUDAAPI tcuMemsetD8(CUdeviceptr dstDevice, unsigned char uc, size_t N);
432 typedef CUresult CUDAAPI tcuMemsetD16(CUdeviceptr dstDevice, unsigned short us, size_t N);
433 typedef CUresult CUDAAPI tcuMemsetD32(CUdeviceptr dstDevice, unsigned int ui, size_t N);
434 typedef CUresult CUDAAPI tcuMemsetD2D8(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height);
435 typedef CUresult CUDAAPI tcuMemsetD2D16(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height);
436 typedef CUresult CUDAAPI tcuMemsetD2D32(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height);
437 typedef CUresult CUDAAPI tcuMemsetD8Async(CUdeviceptr dstDevice, unsigned char uc, size_t N, CUstream hStream);
438 typedef CUresult CUDAAPI tcuMemsetD16Async(CUdeviceptr dstDevice, unsigned short us, size_t N, CUstream hStream);
439 typedef CUresult CUDAAPI tcuMemsetD32Async(CUdeviceptr dstDevice, unsigned int ui, size_t N, CUstream hStream);
440 typedef CUresult CUDAAPI tcuMemsetD2D8Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height, CUstream hStream);
441 typedef CUresult CUDAAPI tcuMemsetD2D16Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height, CUstream hStream);
442 typedef CUresult CUDAAPI tcuMemsetD2D32Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height, CUstream hStream);
443 typedef CUresult CUDAAPI tcuArrayCreate(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR *pAllocateArray);
444 typedef CUresult CUDAAPI tcuArrayGetDescriptor(CUDA_ARRAY_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
445 typedef CUresult CUDAAPI tcuArrayDestroy(CUarray hArray);
446 typedef CUresult CUDAAPI tcuArray3DCreate(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR *pAllocateArray);
447 typedef CUresult CUDAAPI tcuArray3DGetDescriptor(CUDA_ARRAY3D_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
448 typedef CUresult CUDAAPI tcuStreamCreate(CUstream *phStream, unsigned int Flags);
449 typedef CUresult CUDAAPI tcuStreamWaitEvent(CUstream hStream, CUevent hEvent, unsigned int Flags);
450 typedef CUresult CUDAAPI tcuStreamQuery(CUstream hStream);
451 typedef CUresult CUDAAPI tcuStreamSynchronize(CUstream hStream);
452 typedef CUresult CUDAAPI tcuStreamDestroy(CUstream hStream);
453 typedef CUresult CUDAAPI tcuEventCreate(CUevent *phEvent, unsigned int Flags);
454 typedef CUresult CUDAAPI tcuEventRecord(CUevent hEvent, CUstream hStream);
455 typedef CUresult CUDAAPI tcuEventQuery(CUevent hEvent);
456 typedef CUresult CUDAAPI tcuEventSynchronize(CUevent hEvent);
457 typedef CUresult CUDAAPI tcuEventDestroy(CUevent hEvent);
458 typedef CUresult CUDAAPI tcuEventElapsedTime(float *pMilliseconds, CUevent hStart, CUevent hEnd);
459 typedef CUresult CUDAAPI tcuFuncSetBlockShape(CUfunction hfunc, int x, int y, int z);
460 typedef CUresult CUDAAPI tcuFuncSetSharedSize(CUfunction hfunc, unsigned int bytes);
461 typedef CUresult CUDAAPI tcuFuncGetAttribute(int *pi, CUfunction_attribute attrib, CUfunction hfunc);
462 typedef CUresult CUDAAPI tcuFuncSetCacheConfig(CUfunction hfunc, CUfunc_cache config);
463 typedef CUresult CUDAAPI tcuParamSetSize(CUfunction hfunc, unsigned int numbytes);
464 typedef CUresult CUDAAPI tcuParamSeti(CUfunction hfunc, int offset, unsigned int value);
465 typedef CUresult CUDAAPI tcuParamSetf(CUfunction hfunc, int offset, float value);
466 typedef CUresult CUDAAPI tcuParamSetv(CUfunction hfunc, int offset, void *ptr, unsigned int numbytes);
467 typedef CUresult CUDAAPI tcuLaunch(CUfunction f);
468 typedef CUresult CUDAAPI tcuLaunchGrid(CUfunction f, int grid_width, int grid_height);
469 typedef CUresult CUDAAPI tcuLaunchGridAsync(CUfunction f, int grid_width, int grid_height, CUstream hStream);
470 typedef CUresult CUDAAPI tcuParamSetTexRef(CUfunction hfunc, int texunit, CUtexref hTexRef);
471 typedef CUresult CUDAAPI tcuTexRefSetArray(CUtexref hTexRef, CUarray hArray, unsigned int Flags);
472 typedef CUresult CUDAAPI tcuTexRefSetAddress(size_t *ByteOffset, CUtexref hTexRef, CUdeviceptr dptr, size_t bytes);
473 typedef CUresult CUDAAPI tcuTexRefSetAddress2D(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR *desc, CUdeviceptr dptr, size_t Pitch);
474 typedef CUresult CUDAAPI tcuTexRefSetFormat(CUtexref hTexRef, CUarray_format fmt, int NumPackedComponents);
475 typedef CUresult CUDAAPI tcuTexRefSetAddressMode(CUtexref hTexRef, int dim, CUaddress_mode am);
476 typedef CUresult CUDAAPI tcuTexRefSetFilterMode(CUtexref hTexRef, CUfilter_mode fm);
477 typedef CUresult CUDAAPI tcuTexRefSetFlags(CUtexref hTexRef, unsigned int Flags);
478 typedef CUresult CUDAAPI tcuTexRefGetAddress(CUdeviceptr *pdptr, CUtexref hTexRef);
479 typedef CUresult CUDAAPI tcuTexRefGetArray(CUarray *phArray, CUtexref hTexRef);
480 typedef CUresult CUDAAPI tcuTexRefGetAddressMode(CUaddress_mode *pam, CUtexref hTexRef, int dim);
481 typedef CUresult CUDAAPI tcuTexRefGetFilterMode(CUfilter_mode *pfm, CUtexref hTexRef);
482 typedef CUresult CUDAAPI tcuTexRefGetFormat(CUarray_format *pFormat, int *pNumChannels, CUtexref hTexRef);
483 typedef CUresult CUDAAPI tcuTexRefGetFlags(unsigned int *pFlags, CUtexref hTexRef);
484 typedef CUresult CUDAAPI tcuTexRefCreate(CUtexref *pTexRef);
485 typedef CUresult CUDAAPI tcuTexRefDestroy(CUtexref hTexRef);
486 typedef CUresult CUDAAPI tcuSurfRefSetArray(CUsurfref hSurfRef, CUarray hArray, unsigned int Flags);
487 typedef CUresult CUDAAPI tcuSurfRefGetArray(CUarray *phArray, CUsurfref hSurfRef);
488 typedef CUresult CUDAAPI tcuGraphicsUnregisterResource(CUgraphicsResource resource);
489 typedef CUresult CUDAAPI tcuGraphicsSubResourceGetMappedArray(CUarray *pArray, CUgraphicsResource resource, unsigned int arrayIndex, unsigned int mipLevel);
490 typedef CUresult CUDAAPI tcuGraphicsResourceGetMappedPointer(CUdeviceptr *pDevPtr, size_t *pSize, CUgraphicsResource resource);
491 typedef CUresult CUDAAPI tcuGraphicsResourceSetMapFlags(CUgraphicsResource resource, unsigned int flags);
492 typedef CUresult CUDAAPI tcuGraphicsMapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
493 typedef CUresult CUDAAPI tcuGraphicsUnmapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
494 typedef CUresult CUDAAPI tcuGetExportTable(const void **ppExportTable, const CUuuid *pExportTableId);
495 typedef CUresult CUDAAPI tcuGLCtxCreate(CUcontext *pCtx, unsigned int Flags, CUdevice device );
496 typedef CUresult CUDAAPI tcuGraphicsGLRegisterBuffer(CUgraphicsResource *pCudaResource, GLuint buffer, unsigned int Flags);
497 typedef CUresult CUDAAPI tcuGraphicsGLRegisterImage(CUgraphicsResource *pCudaResource, GLuint image, GLenum target, unsigned int Flags);
498 typedef CUresult CUDAAPI tcuCtxSetCurrent(CUcontext ctx);
499
500 /* function declarations */
501
502 extern tcuInit *cuInit;
503 extern tcuDriverGetVersion *cuDriverGetVersion;
504 extern tcuDeviceGet *cuDeviceGet;
505 extern tcuDeviceGetCount *cuDeviceGetCount;
506 extern tcuDeviceGetName *cuDeviceGetName;
507 extern tcuDeviceComputeCapability *cuDeviceComputeCapability;
508 extern tcuDeviceTotalMem *cuDeviceTotalMem;
509 extern tcuDeviceGetProperties *cuDeviceGetProperties;
510 extern tcuDeviceGetAttribute *cuDeviceGetAttribute;
511 extern tcuCtxCreate *cuCtxCreate;
512 extern tcuCtxDestroy *cuCtxDestroy;
513 extern tcuCtxAttach *cuCtxAttach;
514 extern tcuCtxDetach *cuCtxDetach;
515 extern tcuCtxPushCurrent *cuCtxPushCurrent;
516 extern tcuCtxPopCurrent *cuCtxPopCurrent;
517 extern tcuCtxGetDevice *cuCtxGetDevice;
518 extern tcuCtxSynchronize *cuCtxSynchronize;
519 extern tcuModuleLoad *cuModuleLoad;
520 extern tcuModuleLoadData *cuModuleLoadData;
521 extern tcuModuleLoadDataEx *cuModuleLoadDataEx;
522 extern tcuModuleLoadFatBinary *cuModuleLoadFatBinary;
523 extern tcuModuleUnload *cuModuleUnload;
524 extern tcuModuleGetFunction *cuModuleGetFunction;
525 extern tcuModuleGetGlobal *cuModuleGetGlobal;
526 extern tcuModuleGetTexRef *cuModuleGetTexRef;
527 extern tcuModuleGetSurfRef *cuModuleGetSurfRef;
528 extern tcuMemGetInfo *cuMemGetInfo;
529 extern tcuMemAlloc *cuMemAlloc;
530 extern tcuMemAllocPitch *cuMemAllocPitch;
531 extern tcuMemFree *cuMemFree;
532 extern tcuMemGetAddressRange *cuMemGetAddressRange;
533 extern tcuMemAllocHost *cuMemAllocHost;
534 extern tcuMemFreeHost *cuMemFreeHost;
535 extern tcuMemHostAlloc *cuMemHostAlloc;
536 extern tcuMemHostGetDevicePointer *cuMemHostGetDevicePointer;
537 extern tcuMemHostGetFlags *cuMemHostGetFlags;
538 extern tcuMemcpyHtoD *cuMemcpyHtoD;
539 extern tcuMemcpyDtoH *cuMemcpyDtoH;
540 extern tcuMemcpyDtoD *cuMemcpyDtoD;
541 extern tcuMemcpyDtoA *cuMemcpyDtoA;
542 extern tcuMemcpyAtoD *cuMemcpyAtoD;
543 extern tcuMemcpyHtoA *cuMemcpyHtoA;
544 extern tcuMemcpyAtoH *cuMemcpyAtoH;
545 extern tcuMemcpyAtoA *cuMemcpyAtoA;
546 extern tcuMemcpy2D *cuMemcpy2D;
547 extern tcuMemcpy2DUnaligned *cuMemcpy2DUnaligned;
548 extern tcuMemcpy3D *cuMemcpy3D;
549 extern tcuMemcpyHtoDAsync *cuMemcpyHtoDAsync;
550 extern tcuMemcpyDtoHAsync *cuMemcpyDtoHAsync;
551 extern tcuMemcpyDtoDAsync *cuMemcpyDtoDAsync;
552 extern tcuMemcpyHtoAAsync *cuMemcpyHtoAAsync;
553 extern tcuMemcpyAtoHAsync *cuMemcpyAtoHAsync;
554 extern tcuMemcpy2DAsync *cuMemcpy2DAsync;
555 extern tcuMemcpy3DAsync *cuMemcpy3DAsync;
556 extern tcuMemsetD8 *cuMemsetD8;
557 extern tcuMemsetD16 *cuMemsetD16;
558 extern tcuMemsetD32 *cuMemsetD32;
559 extern tcuMemsetD2D8 *cuMemsetD2D8;
560 extern tcuMemsetD2D16 *cuMemsetD2D16;
561 extern tcuMemsetD2D32 *cuMemsetD2D32;
562 extern tcuFuncSetBlockShape *cuFuncSetBlockShape;
563 extern tcuFuncSetSharedSize *cuFuncSetSharedSize;
564 extern tcuFuncGetAttribute *cuFuncGetAttribute;
565 extern tcuFuncSetCacheConfig *cuFuncSetCacheConfig;
566 extern tcuArrayCreate *cuArrayCreate;
567 extern tcuArrayGetDescriptor *cuArrayGetDescriptor;
568 extern tcuArrayDestroy *cuArrayDestroy;
569 extern tcuArray3DCreate *cuArray3DCreate;
570 extern tcuArray3DGetDescriptor *cuArray3DGetDescriptor;
571 extern tcuTexRefCreate *cuTexRefCreate;
572 extern tcuTexRefDestroy *cuTexRefDestroy;
573 extern tcuTexRefSetArray *cuTexRefSetArray;
574 extern tcuTexRefSetAddress *cuTexRefSetAddress;
575 extern tcuTexRefSetAddress2D *cuTexRefSetAddress2D;
576 extern tcuTexRefSetFormat *cuTexRefSetFormat;
577 extern tcuTexRefSetAddressMode *cuTexRefSetAddressMode;
578 extern tcuTexRefSetFilterMode *cuTexRefSetFilterMode;
579 extern tcuTexRefSetFlags *cuTexRefSetFlags;
580 extern tcuTexRefGetAddress *cuTexRefGetAddress;
581 extern tcuTexRefGetArray *cuTexRefGetArray;
582 extern tcuTexRefGetAddressMode *cuTexRefGetAddressMode;
583 extern tcuTexRefGetFilterMode *cuTexRefGetFilterMode;
584 extern tcuTexRefGetFormat *cuTexRefGetFormat;
585 extern tcuTexRefGetFlags *cuTexRefGetFlags;
586 extern tcuSurfRefSetArray *cuSurfRefSetArray;
587 extern tcuSurfRefGetArray *cuSurfRefGetArray;
588 extern tcuParamSetSize *cuParamSetSize;
589 extern tcuParamSeti *cuParamSeti;
590 extern tcuParamSetf *cuParamSetf;
591 extern tcuParamSetv *cuParamSetv;
592 extern tcuParamSetTexRef *cuParamSetTexRef;
593 extern tcuLaunch *cuLaunch;
594 extern tcuLaunchGrid *cuLaunchGrid;
595 extern tcuLaunchGridAsync *cuLaunchGridAsync;
596 extern tcuEventCreate *cuEventCreate;
597 extern tcuEventRecord *cuEventRecord;
598 extern tcuEventQuery *cuEventQuery;
599 extern tcuEventSynchronize *cuEventSynchronize;
600 extern tcuEventDestroy *cuEventDestroy;
601 extern tcuEventElapsedTime *cuEventElapsedTime;
602 extern tcuStreamCreate *cuStreamCreate;
603 extern tcuStreamQuery *cuStreamQuery;
604 extern tcuStreamSynchronize *cuStreamSynchronize;
605 extern tcuStreamDestroy *cuStreamDestroy;
606 extern tcuGraphicsUnregisterResource *cuGraphicsUnregisterResource;
607 extern tcuGraphicsSubResourceGetMappedArray *cuGraphicsSubResourceGetMappedArray;
608 extern tcuGraphicsResourceGetMappedPointer *cuGraphicsResourceGetMappedPointer;
609 extern tcuGraphicsResourceSetMapFlags *cuGraphicsResourceSetMapFlags;
610 extern tcuGraphicsMapResources *cuGraphicsMapResources;
611 extern tcuGraphicsUnmapResources *cuGraphicsUnmapResources;
612 extern tcuGetExportTable *cuGetExportTable;
613 extern tcuCtxSetLimit *cuCtxSetLimit;
614 extern tcuCtxGetLimit *cuCtxGetLimit;
615 extern tcuGLCtxCreate *cuGLCtxCreate;
616 extern tcuGraphicsGLRegisterBuffer *cuGraphicsGLRegisterBuffer;
617 extern tcuGraphicsGLRegisterImage *cuGraphicsGLRegisterImage;
618 extern tcuCtxSetCurrent *cuCtxSetCurrent;
619
620 #endif /* __UTIL_CUDA_H__ */
621