[Piglit] [RFC 1/3] framework: introduce interface for external buffers

Topi Pohjolainen topi.pohjolainen at intel.com
Tue Feb 26 05:15:46 PST 2013


In order to test the OES_EGL_image_external with planar formats such
as YUV420 or NV12, one needs a way for creating buffers that can be
passed to EGL and filling them with YUV-data for the GL-stack to
sample.
By the nature the extension in question deals with platform specific
buffers and hence the idea here is to push the details down into the
platform specific logic leaving the tests themselves platform
independent.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 tests/util/piglit-framework-gl.c                   |   29 ++++++++++++++++++++
 tests/util/piglit-framework-gl.h                   |   21 ++++++++++++++
 .../util/piglit-framework-gl/piglit_gl_framework.h |   23 ++++++++++++++++
 3 files changed, 73 insertions(+)

diff --git a/tests/util/piglit-framework-gl.c b/tests/util/piglit-framework-gl.c
index 441e271..87774a0 100644
--- a/tests/util/piglit-framework-gl.c
+++ b/tests/util/piglit-framework-gl.c
@@ -162,3 +162,32 @@ piglit_set_reshape_func(void (*func)(int w, int h))
 	if (!gl_fw->set_reshape_func)
 		gl_fw->set_reshape_func(gl_fw, func);
 }
+
+void *
+piglit_create_ext_420_buf(unsigned w, unsigned h, bool swap_vu,
+			const void *y, const void *u, const void *v)
+{
+	if (!gl_fw->create_external_420_buffer)
+		return NULL;
+
+	return gl_fw->create_external_420_buffer(gl_fw, w, h, swap_vu, y, u, v);
+}
+
+void *
+piglit_create_ext_nv12_buf(unsigned w, unsigned h, const void *y,
+			const void *uv)
+{
+	if (!gl_fw->create_external_nv12_buffer)
+		return NULL;
+
+	return gl_fw->create_external_nv12_buffer(gl_fw, w, h, y, uv);
+}
+
+void
+piglit_destroy_ext_buf(void *buf)
+{
+	if (!gl_fw->destroy_external_buffer)
+		return;
+
+	gl_fw->destroy_external_buffer(gl_fw, buf);
+}
diff --git a/tests/util/piglit-framework-gl.h b/tests/util/piglit-framework-gl.h
index bc3a3cd..44ae976 100644
--- a/tests/util/piglit-framework-gl.h
+++ b/tests/util/piglit-framework-gl.h
@@ -254,4 +254,25 @@ void piglit_post_redisplay(void);
 void piglit_set_keyboard_func(void (*func)(unsigned char key, int x, int y));
 void piglit_set_reshape_func(void (*func)(int w, int h));
 
+/**
+ * Create YUV420 or YV12 (YVU420) formatted buffer of the given size and
+ * set it contents according to the given planes. Here there is no
+ * padding in the planes y-plane having stride equaling the given width
+ * and u/v-planes having stride equaling half of the width. By setting
+ * the 'swap_vu' to true, the order of u/v planes is swapped
+ * corresponding to YV12 (YVU420) format.
+ */
+void *piglit_create_ext_420_buf(unsigned w, unsigned h, bool swap_vu,
+				const void *y, const void *u, const void *v);
+
+/**
+ * Create NV12 formatted buffer of the given size and set it contents
+ * according to the given planes. Here there is no padding in the planes
+ * both y-plane and uv-plane having stride equaling the given width.
+ */
+void *piglit_create_ext_nv12_buf(unsigned w, unsigned h,
+				 const void *y, const void *uv);
+
+void piglit_destroy_ext_buf(void *buf);
+
 #endif /* PIGLIT_FRAMEWORK_H */
diff --git a/tests/util/piglit-framework-gl/piglit_gl_framework.h b/tests/util/piglit-framework-gl/piglit_gl_framework.h
index 6dbdf94..a89f863 100644
--- a/tests/util/piglit-framework-gl/piglit_gl_framework.h
+++ b/tests/util/piglit-framework-gl/piglit_gl_framework.h
@@ -71,6 +71,29 @@ struct piglit_gl_framework {
 
 	void
 	(*destroy)(struct piglit_gl_framework *gl_fw);
+
+	/**
+	 * \see piglit_create_ext_420_buf()
+	 */
+	void *
+	(*create_external_420_buffer)(struct piglit_gl_framework *gl_fw,
+				      unsigned w, unsigned h, bool swap_vu,
+				      const void *y,
+				      const void *u,
+				      const void *v);
+
+	/**
+	 * \see piglit_create_ext_nv12_buf()
+	 */
+	void *
+	(*create_external_nv12_buffer)(struct piglit_gl_framework *gl_fw,
+				       unsigned w, unsigned h,
+				       const void *y,
+				       const void *uv);
+
+	void
+	(*destroy_external_buffer)(struct piglit_gl_framework *gl_fw,
+				   void *buf);
 };
 
 struct piglit_gl_framework*
-- 
1.7.9.5



More information about the Piglit mailing list