FBO + float (ati_float and arb) = error

I’ve tried to find how to solve this, but I’ve found nothing that helped me.
I try to make FBO with float texture on GeForce 6.

Here is the code:

glGenFramebuffersEXT(1, &fbo);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);

glGenTextures(1, &color_attachment);
glBindTexture(target, color_attachment);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA_FLOAT16_ATI, width, height, 0, GL_RGBA_FLOAT16_ATI, GL_FLOAT, NULL);
glTexParameterf(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, color_attachment, 0);

GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);

What can I do to solve this?
I’ve tried changing MIN and MAG filters to GL_NEAREST, disabling depth buffers and some other things and nothing.
It works great with GL_RGBA.

GL_RGBA_FLOAT16_ATI is not a valid external format (AFAIK). This should be GL_RGBA. Did you check for GL errors after each call (or use a GL debugger such as gDebugger)?

Also, Geforce 6 with latest drivers supports ATI_texture_float and ARB_texture_float. Prefer GL_RGBA16F_ARB to GL_RGBA_FLOAT16_ATI for the internal format. Same #define value, but symbol is cross-vendor.

Thank you!
It was all about external format!
I had no idea it is taken at all, because I pass NULL so I pass no data and I thought that format of this NULL data is not important.
I’ve changed it to GL_RGBA and it works now!