PDA

View Full Version : NPOT 3d texture revisited



dobradusa
12-05-2006, 12:58 AM
I am using a 3D textures of size 2^m+2 (eg. 18, 66, 258, don't ask why). If I use these dimensions in a call to glTexImage3D, the rendering is awfully slow. If i use the dimensions which are rounded to a higher power of 2 (reorganizing the data in memory accordingly), the rendering is fast. I can understand all that, because my Radeon x800 supposedly doesn't support NPOT textures very well.
But since 2^m+2 is exactly the dimension of a power of 2 texture with a border, I expected to get fast rendering by using texture border and rescaling the texture coordinates in the fragment program so to generate coordinates outside [0,1]. However, the rendering is still slow and I wonder why. It shouldn't be, since the 2^m+2 dimension is in the specs from the very beginning. It thought even the oldest cards should support it well, even for 3D textures.

Xmas
12-05-2006, 01:18 AM
Not all chips actually support texture border in hardware. I'm not sure the X800 does. Radeon 9x00 no, X1x00 yes. So maybe you could do a quick test without border.

What clamp mode are you using?

dobradusa
12-05-2006, 08:24 AM
Originally posted by Xmas:
Not all chips actually support texture border in hardware. I'm not sure the X800 does. Radeon 9x00 no, X1x00 yes. So maybe you could do a quick test without border. I think I tried all possibilities, as I explained. With up-rounded power-of_two, without power_of_two, and with the texture border.

Actually I believe my card is 9800, but the ATI control panel reports it as X800. How can I find out whether my hardware supports texture borders with 3d textures? Can I do it through some OpenGL query, or is it listed somewhere?


Originally posted by Xmas:

What clamp mode are you using? I am using GL_CLAMP_TO_BORDER.

Xmas
12-05-2006, 08:35 AM
If you have the DirectX SDK installed, you can use the DX Caps Viewer and look under VolumeTextureAddressCaps. There should be a D3DPTADDRESSCAPS_BORDER.

I just noticed that there is no border support for 3D textures even on an X1600, it's 2D textures only. I guess you're out of luck here.