• Create Account

## GL_DEPTH24_STENCIL8_EXT not working ok on NVidia and Intel. ATI doing fine

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

10 replies to this topic

### #1floatingwoods  Members

Posted 30 September 2013 - 03:24 AM

Hi,

I am having compatibility issues between graphic cards, when using FBO and stencil buffers: it only works correctly on ATI cards, NVidia (GeForce GT 620) and Intel (HD Graphics 4000) fail (they operate as if the stencil buffers were not enabled). I made sure I had the last drivers. Any idea what I am doing wrong, or what is going on?

Here my code:

glGenFramebuffersEXT(1,&_fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,_fbo);

glGenRenderbuffersEXT(1,&_fboDepthBuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,_fboDepthBuffer);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH24_STENCIL8_EXT,resX,resY);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT,_fboDepthBuffer);

glGenRenderbuffersEXT(1,&_fboPictureBuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,_fboPictureBuffer);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_RGB,resX,resY);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_RENDERBUFFER_EXT,_fboPictureBuffer);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,_fbo);

The FBO functionality works fine with all tested graphic cards. Only the stencil buffer functionality fails with above mentionned graphic cards.

Thanks for any insight.

### #2mhagain  Members

Posted 30 September 2013 - 06:57 AM

GL_EXT_framebuffer_object doesn't support packed depth-stencil formats, you need to check for GL_EXT_packed_depth_stencil before you can use them (and if you don't have GL_EXT_packed_depth_stencil you can't use them).

Any reason why you're not using GL_ARB_framebuffer_object, which does?

It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.

### #3floatingwoods  Members

Posted 30 September 2013 - 09:19 AM

Thank you mhagain,

The code is quite old... I now switched to ARB_framebuffer_object. I basically left everything untouched, except that I check for the availability of ARB_framebuffer_object, then bind the functions to the same names, except for the final EXT.

I have also checked that my card has EXT_packed_depth_stencil. It has it, but my problem remains on the NVidia card and Intel card. What could be the reason?

### #4mhagain  Members

Posted 30 September 2013 - 11:29 AM

Not sure why it would happen if the extension is exported; I've never actually used EXT_framebuffer_object (either ARB was always available by the time I got interested in FBOs in OpenGL, or else I needed to support hardware that didnt have either so I used CopyTexSubImage2D).

It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.

### #5skarab  Members

Posted 30 September 2013 - 11:52 AM

GL_DEPTH24_STENCIL8 instead of GL_DEPTH24_STENCIL8_EXT maybe ?

Anyway it seems to have some problems on ATI (http://www.opengl.org/discussion_boards/archive/index.php/t-180986.html),

interested to know to, haven't done full testing for now.

wow, fast read sorry, cool to know it works on ATI.

Edited by skarab, 30 September 2013 - 11:54 AM.

### #6floatingwoods  Members

Posted 30 September 2013 - 01:06 PM

Thanks to both of you.

I found the problem. Changing this line:

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT,_fboDepthBuffer);

into this:

glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_STENCIL_ATTACHMENT,GL_RENDERBUFFER_EXT,_fboDepthBuffer);

Makes the trick. The question is now why it worked on ATI cards with the wrong argument?!

### #7phantom  Members

Posted 30 September 2013 - 01:37 PM

Which AMD card were you trying it on?

### #8mhagain  Members

Posted 30 September 2013 - 01:41 PM

Makes the trick. The question is now why it worked on ATI cards with the wrong argument?!

With API/AMD my first instinct would be to say "bad driver".  It's normally the other way around (things that should work don't) but still a viable possibility.

It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.

### #9phantom  Members

Posted 30 September 2013 - 01:57 PM

That's why I asked which hardware he was testing on; with anything GCN based it working is logical... in an odd way.

GCN hardware doesn't used packed depth-stencil targets; memory is allocated in two blocks of depth and stencil, so from the drivers point of view if you allocate a D24_S8 texture it is, in fact, allocating a D32 & S8 textures behind the scenes (so you get no memory saving at all D24 vs D32), so when you bind this to a depth attachment target this is 'ok' as the driver knows how attach things correctly. Chances are the 'completeness' rules are woolly enough here that AMD's logic is allowed and perfectly fine.

Although this does bring the follow up question of 'does the OP see the expected result with regards to stencil values?' as they probably shouldn't see any coming out for this to make sense

### #10floatingwoods  Members

Posted 01 October 2013 - 09:06 AM

Hello,

The ATI card where the original (i.e. wrong) code was working was an ATI Mobility Radeon HD 5470. The behaviour was correct (i.e. the stencil buffers did what they were used for (implementation of mirrors in a scene))

### #11phantom  Members

Posted 01 October 2013 - 11:44 AM

In that case it's either a driver 'bug' or the driver saying 'I know what you meant' and covering your mistake up.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.