Library/ManagedCuda/CudaTexture.cs
/// <summary>
/// Create a new CudaDeviceVariable and bind it to a texture reference.
/// Sets the border color for the texture reference<para/>
/// Specifies the value of the RGBA color via the \p pBorderColor to the texture reference
/// \p hTexRef. The color value supports only float type and holds color components in
/// the following sequence:<para/>
/// pBorderColor[0] holds 'R' component<para/>
/// pBorderColor[1] holds 'G' component<para/>
/// pBorderColor[2] holds 'B' component<para/>
/// pBorderColor[3] holds 'A' component<para/>
/// addressMode is set to CU_TR_ADDRESS_MODE_BORDER
/// </summary>
/// <param name="kernel"></param>
/// <param name="texName"></param>
/// <param name="borderColor">RGBA color</param>
/// <param name="flags"></param>
/// <param name="format"></param>
/// <param name="size">In elements</param>
Create a new CudaDeviceVariable and bind it to a texture reference.
Sets the border color for the texture reference
Specifies the value of the RGBA color via the \p pBorderColor to the texture reference
\p hTexRef.
Create a new CudaDeviceVariable and bind it to a texture reference . Sets the border color for the texture reference Specifies the value of the RGBA color via the \ p pBorderColor to the texture reference \ p hTexRef .
public static CudaDeviceVariable<T> BindTexture<T>(CudaKernel kernel, string texName, CUTexRefSetFlags flags, CUArrayFormat format, SizeT size, float[] borderColor) where T : struct
		{
			CUtexref texref = new CUtexref();
			CUResult res = DriverAPINativeMethods.ModuleManagement.cuModuleGetTexRef(ref texref, kernel.CUModule, texName);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}, Texture name: {3}", DateTime.Now, "cuModuleGetTexRef", res, texName));
			if (res != CUResult.Success) throw new CudaException(res);
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetAddressMode(texref, 0, CUAddressMode.Border);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetAddressMode", res));
			if (res != CUResult.Success) throw new CudaException(res);
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetFilterMode(texref, CUFilterMode.Point); 
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetFilterMode", res));
			if (res != CUResult.Success) throw new CudaException(res);
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetFlags(texref, flags);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetFlags", res));
			if (res != CUResult.Success) throw new CudaException(res);
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetFormat(texref, format, CudaHelperMethods.GetNumChannels(typeof(T)));
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetFormat", res));
			if (res != CUResult.Success) throw new CudaException(res);
			CudaDeviceVariable<T> devVar = new CudaDeviceVariable<T>(size);
			SizeT NULL = 0;
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetAddress_v2(ref NULL, texref, devVar.DevicePointer, devVar.SizeInBytes);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetAddress", res));
			if (res != CUResult.Success) throw new CudaException(res);
			res = DriverAPINativeMethods.TextureReferenceManagement.cuTexRefSetBorderColor(texref, borderColor);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cuTexRefSetBorderColor", res));
			if (res != CUResult.Success) throw new CudaException(res);
			return devVar;
		}
public static CudaDeviceVariable < T > BindTexture < T > ( CudaKernel kernel , string texName , CUTexRefSetFlags flags , CUArrayFormat format , SizeT size , float [ ] borderColor ) where T : struct { CUtexref texref = new CUtexref ( ) ; CUResult res = DriverAPINativeMethods . ModuleManagement . cuModuleGetTexRef ( ref texref , kernel . CUModule , texName ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res , texName ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetAddressMode ( texref , 0 , CUAddressMode . Border ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetFilterMode ( texref , CUFilterMode . Point ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetFlags ( texref , flags ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetFormat ( texref , format , CudaHelperMethods . GetNumChannels ( typeof ( T ) ) ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; CudaDeviceVariable < T > devVar = new CudaDeviceVariable < T > ( size ) ; SizeT NULL = 0 ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetAddress_v2 ( ref NULL , texref , devVar . DevicePointer , devVar . SizeInBytes ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; res = DriverAPINativeMethods . TextureReferenceManagement . cuTexRefSetBorderColor ( texref , borderColor ) ; Debug . WriteLine ( String . Format ( " " , DateTime . Now , " " , res ) ) ; if ( res != CUResult . Success ) throw new CudaException ( res ) ; return devVar ; }
Create a new CudaDeviceVariable and bind it to a texture reference.
Create a new CudaDeviceVariable and bind it to a texture reference .
//Textures from linear memory can only by point filtered
kernel
CudaKernel
None
texName
string
None
flags
CUTexRefSetFlags
None
format
CUArrayFormat
None
size
SizeT
None
borderColor
float[]
None