blob: 8f13a7d0a81174b74b8c0612f116507c2d329fb0 [file] [log] [blame]
#ifndef THC_GENERIC_FILE
#define THC_GENERIC_FILE "generic/THCTensor.cu"
#else
cudaTextureObject_t THCTensor_(getTextureObject)(THCState *state, THCTensor *self)
{
THCAssertSameGPU(THCTensor_(checkGPU)(state, 1, self));
cudaTextureObject_t texObj;
struct cudaResourceDesc resDesc;
memset(&resDesc, 0, sizeof(resDesc));
resDesc.resType = cudaResourceTypeLinear;
resDesc.res.linear.devPtr = THCTensor_(data)(state, self);
resDesc.res.linear.sizeInBytes = THCTensor_(nElement)(state, self) * 4;
resDesc.res.linear.desc = cudaCreateChannelDesc(32, 0, 0, 0,
cudaChannelFormatKindFloat);
struct cudaTextureDesc texDesc;
memset(&texDesc, 0, sizeof(texDesc));
cudaCreateTextureObject(&texObj, &resDesc, &texDesc, NULL);
cudaError errcode = cudaGetLastError();
if(errcode != cudaSuccess) {
if (THCTensor_(nElement)(state, self) > 2>>27)
THError("Failed to create texture object, "
"nElement:%ld exceeds 27-bit addressing required for tex1Dfetch. Cuda Error: %s",
THCTensor_(nElement)(state, self), cudaGetErrorString(errcode));
else
THError("Failed to create texture object: %s", cudaGetErrorString(errcode));
}
return texObj;
}
THC_API int THCTensor_(getDevice)(THCState* state, const THCTensor* tensor) {
if (!tensor->storage) return -1;
return THCStorage_(getDevice)(state, tensor->storage);
}
#endif