On 03/24/2014 11:33 PM, Chris Forbes wrote:
If the framebuffer has no attachments at all, the first incomplete
status generated is FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT.

Adjust the tests for FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER and
FRAMEBUFFER_INCOMPLETE_READ_BUFFER to avoid tripping over this, by
adding a depth renderbuffer attachment.

This extra attachment is chosen to avoid imposing additional
requirements -- multiple color attachments are not required, nor
are depth textures.

Bugzilla: 
https://urldefense.proofpoint.com/v1/url?u=https://bugs.freedesktop.org/show_bug.cgi?id%3D76579&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=lGQMzzTgII0I7jefp2FHq7WtZ%2BTLs8wadB%2BiIj9xpBY%3D%0A&m=dVqBvcr8u%2B3rKyetbSNK3NL5z3SozJ%2F1seIawLk35zE%3D%0A&s=79040d92c297b5a7022b2e5b7e3e84cc7b046ae21a6a6c8f22504ee117b6a3b8
Signed-off-by: Chris Forbes <[email protected]>
---
  tests/glean/tfbo.cpp | 24 ++++++++++++++++++++++++
  1 file changed, 24 insertions(+)

diff --git a/tests/glean/tfbo.cpp b/tests/glean/tfbo.cpp
index d39eb6f..fcf457f 100644
--- a/tests/glean/tfbo.cpp
+++ b/tests/glean/tfbo.cpp
@@ -1218,6 +1218,7 @@ FBOTest::testErrorHandling(void)
  {
          GLuint fbs[1];
          GLuint textures[2];
+       GLuint renderbuffer;
          GLenum status;
        bool have_ARB_ES2 = GLUtils::haveExtension("GL_ARB_ES2_compatibility");

@@ -1309,13 +1310,25 @@ FBOTest::testErrorHandling(void)
                  // The value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT must 
not
                  // be NONE for any color attachment point(s) named by
                // DRAW_BUFFERi.
+               // [Note: to avoid being caught by the no-attachments
+               // case above, we attach a depth renderbuffer.]
                  glGenFramebuffersEXT(1, fbs);
                  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
                  glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT +
                               maxColorAttachment - 1);
+               glGenRenderbuffers(1, &renderbuffer);
+               glBindRenderbuffer(GL_RENDERBUFFER_EXT, renderbuffer);
+               glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,
+                                     TEXSIZE, TEXSIZE);
+               glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
+                                         GL_DEPTH_ATTACHMENT_EXT,
+                                         GL_RENDERBUFFER_EXT,
+                                         renderbuffer);
                  status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
                  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
                  glDeleteFramebuffersEXT(1, fbs);
+               glDeleteTextures(1, textures);
+               glDeleteRenderbuffers(1, &renderbuffer);
                  if (status != GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT &&
                    !have_ARB_ES2) {
                          REPORT_FAILURE
@@ -1326,14 +1339,25 @@ FBOTest::testErrorHandling(void)
                  // If READ_BUFFER is not NONE, then the value of
                  // FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT must not be NONE for
                  // the color attachment point named by READ_BUFFER.
+               // [Note: to avoid being caught by the no-attachments
+               // case above, we attach a depth renderbuffer.]
                  glGenFramebuffersEXT(1, fbs);
                  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
                  glDrawBuffer(GL_NONE);
                  glReadBuffer(GL_COLOR_ATTACHMENT0_EXT +
                               maxColorAttachment - 1);
+               glGenRenderbuffers(1, &renderbuffer);
+               glBindRenderbuffer(GL_RENDERBUFFER_EXT, renderbuffer);
+               glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,
+                                     TEXSIZE, TEXSIZE);
+               glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
+                                         GL_DEPTH_ATTACHMENT_EXT,
+                                         GL_RENDERBUFFER_EXT,
+                                         renderbuffer);
                  status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
                  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
                  glDeleteFramebuffersEXT(1, fbs);
+               glDeleteRenderbuffers(1, &renderbuffer);
                  if (status != GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT &&
                    !have_ARB_ES2) {
                          REPORT_FAILURE


Reviewed-by: Brian Paul <[email protected]>

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to