27#ifndef PX_CUDA_CONTEX_H
28#define PX_CUDA_CONTEX_H
30#include "foundation/PxPreprocessor.h"
32#if PX_SUPPORT_GPU_PHYSX
34#include "PxCudaTypes.h"
40 struct PxCudaKernelParam
48 template<
typename CUenum>
53 PxCUenum(CUenum e) { value = PxU32(e); }
54 operator CUenum()
const {
return CUenum(value); }
58 typedef PxCUenum<CUjit_option> PxCUjit_option;
59 typedef PxCUenum<CUresult> PxCUresult;
61 typedef PxCUenum<PxU32> PxCUjit_option;
62 typedef PxCUenum<PxU32> PxCUresult;
65#define PX_CUDA_KERNEL_PARAM(X) { (void*)&X, sizeof(X) }
66#define PX_CUDA_KERNEL_PARAM2(X) (void*)&X
68 class PxDeviceAllocatorCallback;
75 virtual ~PxCudaContext() {}
77 PxDeviceAllocatorCallback* mAllocatorCallback;
80 virtual void release() = 0;
82 virtual PxCUresult memAlloc(CUdeviceptr *dptr,
size_t bytesize) = 0;
84 virtual PxCUresult memFree(CUdeviceptr dptr) = 0;
86 virtual PxCUresult memHostAlloc(
void **pp,
size_t bytesize,
unsigned int Flags) = 0;
88 virtual PxCUresult memFreeHost(
void *p) = 0;
90 virtual PxCUresult memHostGetDevicePointer(CUdeviceptr *pdptr,
void *p,
unsigned int Flags) = 0;
92 virtual PxCUresult moduleLoadDataEx(CUmodule *module,
const void *image,
unsigned int numOptions, PxCUjit_option *options,
void **optionValues) = 0;
94 virtual PxCUresult moduleGetFunction(CUfunction *hfunc, CUmodule hmod,
const char *name) = 0;
96 virtual PxCUresult moduleUnload(CUmodule hmod) = 0;
98 virtual PxCUresult streamCreate(CUstream *phStream,
unsigned int Flags) = 0;
100 virtual PxCUresult streamCreateWithPriority(CUstream *phStream,
unsigned int flags,
int priority) = 0;
102 virtual PxCUresult streamFlush(CUstream hStream) = 0;
104 virtual PxCUresult streamWaitEvent(CUstream hStream, CUevent hEvent,
unsigned int Flags) = 0;
106 virtual PxCUresult streamDestroy(CUstream hStream) = 0;
108 virtual PxCUresult streamSynchronize(CUstream hStream) = 0;
110 virtual PxCUresult eventCreate(CUevent *phEvent,
unsigned int Flags) = 0;
112 virtual PxCUresult eventRecord(CUevent hEvent, CUstream hStream) = 0;
114 virtual PxCUresult eventQuery(CUevent hEvent) = 0;
116 virtual PxCUresult eventSynchronize(CUevent hEvent) = 0;
118 virtual PxCUresult eventDestroy(CUevent hEvent) = 0;
120 virtual PxCUresult launchKernel(
122 unsigned int gridDimX,
123 unsigned int gridDimY,
124 unsigned int gridDimZ,
125 unsigned int blockDimX,
126 unsigned int blockDimY,
127 unsigned int blockDimZ,
128 unsigned int sharedMemBytes,
130 PxCudaKernelParam* kernelParams,
131 size_t kernelParamsSizeInBytes,
137 virtual PxCUresult launchKernel(
139 PxU32 gridDimX, PxU32 gridDimY, PxU32 gridDimZ,
140 PxU32 blockDimX, PxU32 blockDimY, PxU32 blockDimZ,
141 PxU32 sharedMemBytes,
147 virtual PxCUresult memcpyDtoH(
void *dstHost, CUdeviceptr srcDevice,
size_t ByteCount) = 0;
149 virtual PxCUresult memcpyDtoHAsync(
void *dstHost, CUdeviceptr srcDevice,
size_t ByteCount, CUstream hStream) = 0;
151 virtual PxCUresult memcpyHtoD(CUdeviceptr dstDevice,
const void *srcHost,
size_t ByteCount) = 0;
153 virtual PxCUresult memcpyHtoDAsync(CUdeviceptr dstDevice,
const void *srcHost,
size_t ByteCount, CUstream hStream) = 0;
155 virtual PxCUresult memcpyDtoDAsync(CUdeviceptr dstDevice, CUdeviceptr srcDevice,
size_t ByteCount, CUstream hStream) = 0;
157 virtual PxCUresult memcpyDtoD(CUdeviceptr dstDevice, CUdeviceptr srcDevice,
size_t ByteCount) = 0;
159 virtual PxCUresult memcpyPeerAsync(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext,
size_t ByteCount, CUstream hStream) = 0;
161 virtual PxCUresult memsetD32Async(CUdeviceptr dstDevice,
unsigned int ui,
size_t N, CUstream hStream) = 0;
163 virtual PxCUresult memsetD8Async(CUdeviceptr dstDevice,
unsigned char uc,
size_t N, CUstream hStream) = 0;
165 virtual PxCUresult memsetD32(CUdeviceptr dstDevice,
unsigned int ui,
size_t N) = 0;
167 virtual PxCUresult memsetD16(CUdeviceptr dstDevice,
unsigned short uh,
size_t N) = 0;
169 virtual PxCUresult memsetD8(CUdeviceptr dstDevice,
unsigned char uc,
size_t N) = 0;
171 virtual PxCUresult getLastError() = 0;
173 PxDeviceAllocatorCallback* getAllocatorCallback() {
return mAllocatorCallback; }
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39