DenisB
February 17, 2009, 2:01pm
1
Hello,
I have a problem accessing the texture with the tex2D(). When I use texture reference
texture<float4, 2, cudaReadModeElementType> texRefA;
and then
tex2D(texRefA, ax, bx);
everything works fine. But when I use
texture<double2, 2, cudaReadModeElementType> texRefAd;
tex2D(texRefAd, ax, bx);
I get a compilation error:
no instance of overloaded function “tex2D” matches the argument list
There is no support of texturing double2 type? Or it’s some other problem?
Indeed, I believe there is no double supported at this time.
Correct. Dig through the forums a bit and there is some example code on how to turn a float2 texture read of a region of doubles in memory into doubles in the kernel. Extending this to a float4 read → double2 should be easy.
DenisB
February 17, 2009, 2:58pm
4
I thought so to. But in the Programming Guide 2.1 I found this:
texture<Type, Dim, ReadMode> texRef;
Type specifies the type of data that is returned when fetching the texture; Type
is restricted to the basic integer and single-precision floating-point types and any
of the 1-, 2-, and 4-component vector types defined in Section 4.3.1.1;
And double2 vector type is defined in Section 4.3.1.1. That’s why I’m not sure.
I thought so to. But in the Programming Guide 2.1 I found this:
texture<Type, Dim, ReadMode> texRef;
Type specifies the type of data that is returned when fetching the texture; Type
is restricted to the basic integer and single-precision floating-point types and any
of the 1-, 2-, and 4-component vector types defined in Section 4.3.1.1;
And double2 vector type is defined in Section 4.3.1.1. That’s why I’m not sure.
Maybe there’s a mistake in the Programming guide, anyway, you can use tex1Dfetch with the following trick :
texture<int4,1> tex_x_double2;
inline device double2 fetch_x(const int& i, const double2 * x)
{
int4 v=tex1Dfetch(tex_x_double2, i);
return make_double2(__hiloint2double(v.y, v.x),__hiloint2double(v.w, v.z));
}