[Piglit] [PATCH 09/16] namespace-pollution: Add glBlitFramebuffer as an operation to test
Ian Romanick
idr at freedesktop.org
Wed Jan 6 16:53:09 PST 2016
From: Ian Romanick <ian.d.romanick at intel.com>
Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
---
tests/all.py | 2 +-
tests/general/object-namespace-pollution.c | 72 ++++++++++++++++++++++++++++++
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/tests/all.py b/tests/all.py
index fc6a0df..c4350b0 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -4609,7 +4609,7 @@ with profile.group_manager(
PiglitGLTest,
grouptools.join('object namespace pollution')) as g:
for object_type in ("buffer", "texture"):
- for operation in ("glBitmap", "glClear", "glClearTexSubImage", "glCopyPixels", "glCopyTexSubImage2D", "glDrawPixels", "glGenerateMipmap", "glGetTexImage", "glTexSubImage2D"):
+ for operation in ("glBitmap", "glBlitFramebuffer", "glClear", "glClearTexSubImage", "glCopyPixels", "glCopyTexSubImage2D", "glDrawPixels", "glGenerateMipmap", "glGetTexImage", "glTexSubImage2D"):
g(['object-namespace-pollution', operation, object_type],
'{} with {}'.format(object_type, operation))
diff --git a/tests/general/object-namespace-pollution.c b/tests/general/object-namespace-pollution.c
index c4ba774..d4f7698 100644
--- a/tests/general/object-namespace-pollution.c
+++ b/tests/general/object-namespace-pollution.c
@@ -431,6 +431,77 @@ do_Bitmap(bool silent_skip)
}
static bool
+do_BlitFramebuffer(bool silent_skip)
+{
+ const GLuint fbos[2] = { FIRST_SPARE_OBJECT, FIRST_SPARE_OBJECT + 1 };
+ const GLuint tex[2] = { FIRST_SPARE_OBJECT, FIRST_SPARE_OBJECT + 1 };
+ bool pass = true;
+
+ /* GL_ARB_framebuffer_object and OpenGL 3.0 require that
+ * glGenFramebuffers be used. This test really does require
+ * GL_EXT_framebuffer_object and GL_EXT_framebuffer_blit.
+ */
+ if (!(piglit_is_extension_supported("GL_EXT_framebuffer_object") &&
+ piglit_is_extension_supported("GL_EXT_framebuffer_blit"))) {
+ if (silent_skip)
+ return true;
+
+ printf("%s requires EXT framebuffer objects.\n", __func__);
+ piglit_report_result(PIGLIT_SKIP);
+ }
+
+ /* Generate the texture objects that will be attached to the
+ * framebuffer objects for the test.
+ */
+ glBindTexture(GL_TEXTURE_2D, tex[0]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, NULL);
+
+ glBindTexture(GL_TEXTURE_2D, tex[1]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, NULL);
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+
+ /* Generate the framebuffer objects. */
+ glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, fbos[0]);
+ glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, tex[0], 0 /* level */);
+ if (glCheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER) !=
+ GL_FRAMEBUFFER_COMPLETE) {
+ printf("\t%s,%d: Draw framebuffer is not complete.\n",
+ __func__, __LINE__);
+ pass = false;
+ }
+
+ glBindFramebufferEXT(GL_READ_FRAMEBUFFER, fbos[1]);
+ glFramebufferTexture2DEXT(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, tex[1], 0 /* level */);
+ if (glCheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER) !=
+ GL_FRAMEBUFFER_COMPLETE) {
+ printf("\t%s,%d: Read framebuffer is not complete.\n",
+ __func__, __LINE__);
+ pass = false;
+ }
+
+ /* Do the "real" test. */
+ glBlitFramebufferEXT(0 /* srcX0 */, 0 /* srcY0 */,
+ 8 /* srcX1 */, 8 /* srcY1 */,
+ 0 /* dstX0 */, 0 /* dstY0 */,
+ 8 /* dstX1 */, 8 /* dstY1 */,
+ GL_COLOR_BUFFER_BIT, GL_NEAREST);
+
+ /* Final clean up. */
+ glBindFramebufferEXT(GL_READ_FRAMEBUFFER, piglit_winsys_fbo);
+ glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, piglit_winsys_fbo);
+
+ glDeleteTextures(ARRAY_SIZE(tex), tex);
+ glDeleteFramebuffersEXT(ARRAY_SIZE(fbos), fbos);
+
+ return piglit_check_gl_error(GL_NO_ERROR) && pass;
+}
+
+static bool
do_Clear(bool silent_skip)
{
/* glClear is always supported, so there is no opportunity to skip. */
@@ -712,6 +783,7 @@ static const struct {
bool (*func)(bool silent_skip);
} operations[] = {
{ "glBitmap", do_Bitmap },
+ { "glBlitFramebuffer", do_BlitFramebuffer },
{ "glClear", do_Clear },
{ "glClearTexSubImage", do_ClearTexSubImage },
{ "glCopyPixels", do_CopyPixels },
--
2.5.0
More information about the Piglit
mailing list