PDA

View Full Version : texture_buffer_object slow performance



Aasimon
09-24-2008, 05:29 AM
Hi Guys,

I am having some problems with TBOs. I am attempting to do character skinning on the GPU (Vista nVidia 9600GT ForceWare 175.19 Drivers 7.15.11.7519).
The code works, but it does it at a really slow pace. I used gDEBugger to help track the problem and using the nVidia GLExpert options it looks like all my TBO are in "SYSTEM_HEAP" memory.

The code is as follows (Which is paraphrased so there might be some typos):
I have 6 TBO allocated as follows:

glGenBuffers( 1, &vertexBO);
glBindBuffer( GL_TEXTURE_BUFFER_EXT, vertexBO);
glBufferData( GL_TEXTURE_BUFFER_EXT, vertexCount, NULL, GL_STATIC_DRAW);
.......
glBufferSubData( GL_TEXTURE_BUFFER_EXT, offset, size, pointer);

I have 6 textures allocated as follows:

glGenTextures( 1, &textureBO);

Then when I want to do actual skinning I do:

glUseProgram( shaderID);

and for each of the six TBOs:

glActiveTexture( GL_TEXTURE0);
glBindTexture( GL_TEXTURE_BUFFER_EXT, textureID);
glTexBufferEXT( GL_TEXTURE_BUFFER_EXT, format, vertexBO);

Where 'format' is one of GL_LUMINANCE_ALPHA32I_EXT, GL_LUMINANCE32I_EXT, GL_LUMINANCE32F_ARB, GL_RGBA32F_ARB

and finishing with a glBegin( GL_TRIANGLE_STRIP)/glEnd() to draw a quad into a frame buffer. One RGBA/XYZW pixel per vertex.

The shader used is like this:

uniform samplerBuffer sampler_1;
uniform usamplerBuffer sampler_2;

void main(){
...
uvec2 data2 = texelFetchBuffer( sampler_2, someUV).xa;
...
float data1 = texelFetchBuffer( sampler_1, someOtherUV).x;
...
}

Does anybody have any ideas why I am getting so bad performance or how I can fix it.

Thanks.

Heady
09-24-2008, 11:12 PM
Maybe one or more formats you use (GL_LUMINANCE_ALPHA32I_EXT, GL_LUMINANCE32I_EXT, GL_LUMINANCE32F_ARB, GL_RGBA32F_ARB) may not be accelerated by your graphics card.

I would first check the performance of each format seperately, I am sure you should find at least one with poor performance.

Aasimon
09-25-2008, 12:25 AM
Good call, I will try that.
Is there also any way to tell the GL/drivers not to emulate and just fail, or even to enumerate these formats?

Thanks.