From: Varad Gautam <[email protected]> EGL_EXT_image_dma_buf_import_modifiers allows creating EGLImages from dmabufs with drm_fourcc.h format modifiers. support this in piglit.
Signed-off-by: Varad Gautam <[email protected]> --- tests/spec/ext_image_dma_buf_import/refcount.c | 6 ++- .../spec/ext_image_dma_buf_import/sample_common.c | 59 +++++++++++++++------- .../spec/ext_image_dma_buf_import/sample_common.h | 8 ++- tests/spec/ext_image_dma_buf_import/sample_rgb.c | 2 +- tests/spec/ext_image_dma_buf_import/sample_yuv.c | 2 +- 5 files changed, 54 insertions(+), 23 deletions(-) diff --git a/tests/spec/ext_image_dma_buf_import/refcount.c b/tests/spec/ext_image_dma_buf_import/refcount.c index 7ea200e..f125928 100644 --- a/tests/spec/ext_image_dma_buf_import/refcount.c +++ b/tests/spec/ext_image_dma_buf_import/refcount.c @@ -70,11 +70,13 @@ piglit_display(void) if (res != PIGLIT_PASS) return res; - res = egl_image_for_dma_buf_fd(buf, dup(buf->fd), fourcc, &img1); + res = egl_image_for_dma_buf_fd(buf, dup(buf->fd), fourcc, + NULL, 0, &img1); if (res != PIGLIT_PASS) return res; - res = egl_image_for_dma_buf_fd(buf, dup(buf->fd), fourcc, &img2); + res = egl_image_for_dma_buf_fd(buf, dup(buf->fd), fourcc, + NULL, 0, &img2); if (res != PIGLIT_PASS) return res; diff --git a/tests/spec/ext_image_dma_buf_import/sample_common.c b/tests/spec/ext_image_dma_buf_import/sample_common.c index 2f586c7..bff4f6e 100644 --- a/tests/spec/ext_image_dma_buf_import/sample_common.c +++ b/tests/spec/ext_image_dma_buf_import/sample_common.c @@ -107,10 +107,13 @@ sample_tex(GLuint tex, unsigned x, unsigned y, unsigned w, unsigned h) } enum piglit_result -egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, EGLImageKHR *out_img) +egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, + uint64_t *modifiers, int num_modifiers, + EGLImageKHR *out_img) { EGLint error; EGLImageKHR img; + int i = 0; EGLint attr_packed[] = { EGL_WIDTH, buf->w, EGL_HEIGHT, buf->h, @@ -121,18 +124,36 @@ egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, EGLImag EGL_NONE }; - EGLint attr_nv12[] = { - EGL_WIDTH, buf->w, - EGL_HEIGHT, buf->h, - EGL_LINUX_DRM_FOURCC_EXT, fourcc, - EGL_DMA_BUF_PLANE0_FD_EXT, fd, - EGL_DMA_BUF_PLANE0_OFFSET_EXT, buf->offset[0], - EGL_DMA_BUF_PLANE0_PITCH_EXT, buf->stride[0], - EGL_DMA_BUF_PLANE1_FD_EXT, fd, - EGL_DMA_BUF_PLANE1_OFFSET_EXT, buf->offset[1], - EGL_DMA_BUF_PLANE1_PITCH_EXT, buf->stride[1], - EGL_NONE - }; + EGLint attr_nv12[30]; + attr_nv12[i++] = EGL_WIDTH; + attr_nv12[i++] = buf->w; + attr_nv12[i++] = EGL_HEIGHT; + attr_nv12[i++] = buf->h; + attr_nv12[i++] = EGL_LINUX_DRM_FOURCC_EXT; + attr_nv12[i++] = fourcc; + attr_nv12[i++] = EGL_DMA_BUF_PLANE0_FD_EXT; + attr_nv12[i++] = fd; + attr_nv12[i++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT; + attr_nv12[i++] = buf->offset[0]; + attr_nv12[i++] = EGL_DMA_BUF_PLANE0_PITCH_EXT; + attr_nv12[i++] = buf->stride[0]; + attr_nv12[i++] = EGL_DMA_BUF_PLANE1_FD_EXT; + attr_nv12[i++] = fd; + attr_nv12[i++] = EGL_DMA_BUF_PLANE1_OFFSET_EXT; + attr_nv12[i++] = buf->offset[1]; + attr_nv12[i++] = EGL_DMA_BUF_PLANE1_PITCH_EXT; + attr_nv12[i++] = buf->stride[1]; + if (modifiers && num_modifiers == 2) { + attr_nv12[i++] = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT; + attr_nv12[i++] = (EGLint) modifiers[0]; + attr_nv12[i++] = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT; + attr_nv12[i++] = modifiers[0] >> 32; + attr_nv12[i++] = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT; + attr_nv12[i++] = (EGLint) modifiers[1]; + attr_nv12[i++] = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT; + attr_nv12[i++] = modifiers[1] >> 32; + } + attr_nv12[i] = EGL_NONE; EGLint attr_yuv420[] = { EGL_WIDTH, buf->w, @@ -192,7 +213,8 @@ egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, EGLImag } static enum piglit_result -sample_buffer(struct piglit_dma_buf *buf, int fourcc) +sample_buffer(struct piglit_dma_buf *buf, int fourcc, + uint64_t *modifiers, int num_modifiers) { enum piglit_result res; EGLImageKHR img; @@ -200,7 +222,8 @@ sample_buffer(struct piglit_dma_buf *buf, int fourcc) int w = buf->w; int h = buf->h; - res = egl_image_for_dma_buf_fd(buf, buf->fd, fourcc, &img); + res = egl_image_for_dma_buf_fd(buf, buf->fd, fourcc, modifiers, + num_modifiers, &img); /* Release the creator side of the buffer. */ piglit_destroy_dma_buf(buf); @@ -228,7 +251,9 @@ destroy: enum piglit_result dma_buf_create_and_sample_32bpp(unsigned w, unsigned h, - int fourcc, const unsigned char *src) + int fourcc, uint64_t *modifiers, + int num_modifiers, + const unsigned char *src) { struct piglit_dma_buf *buf; enum piglit_result res; @@ -237,5 +262,5 @@ dma_buf_create_and_sample_32bpp(unsigned w, unsigned h, if (res != PIGLIT_PASS) return res; - return sample_buffer(buf, fourcc); + return sample_buffer(buf, fourcc, modifiers, num_modifiers); } diff --git a/tests/spec/ext_image_dma_buf_import/sample_common.h b/tests/spec/ext_image_dma_buf_import/sample_common.h index 36a5bb5..15e0fff 100644 --- a/tests/spec/ext_image_dma_buf_import/sample_common.h +++ b/tests/spec/ext_image_dma_buf_import/sample_common.h @@ -33,10 +33,14 @@ */ enum piglit_result dma_buf_create_and_sample_32bpp(unsigned w, unsigned h, - int fourcc, const unsigned char *src); + int fourcc, uint64_t *modifiers, + int num_modifiers, + const unsigned char *src); enum piglit_result -egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, EGLImageKHR *out_img); +egl_image_for_dma_buf_fd(struct piglit_dma_buf *buf, int fd, int fourcc, + uint64_t *modifiers, int num_modifiers, + EGLImageKHR *out_img); enum piglit_result texture_for_egl_image(EGLImageKHR img, GLuint *out_tex); diff --git a/tests/spec/ext_image_dma_buf_import/sample_rgb.c b/tests/spec/ext_image_dma_buf_import/sample_rgb.c index b659717..10f4ed1 100644 --- a/tests/spec/ext_image_dma_buf_import/sample_rgb.c +++ b/tests/spec/ext_image_dma_buf_import/sample_rgb.c @@ -59,7 +59,7 @@ piglit_display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - res = dma_buf_create_and_sample_32bpp(2, 2, fourcc, src); + res = dma_buf_create_and_sample_32bpp(2, 2, fourcc, NULL, 0, src); if (res != PIGLIT_PASS) return res; diff --git a/tests/spec/ext_image_dma_buf_import/sample_yuv.c b/tests/spec/ext_image_dma_buf_import/sample_yuv.c index a314bc5..856cf04 100644 --- a/tests/spec/ext_image_dma_buf_import/sample_yuv.c +++ b/tests/spec/ext_image_dma_buf_import/sample_yuv.c @@ -120,7 +120,7 @@ piglit_display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - res = dma_buf_create_and_sample_32bpp(4, 4, fourcc, t); + res = dma_buf_create_and_sample_32bpp(4, 4, fourcc, NULL, 0, t); if (res != PIGLIT_PASS) return res; -- 2.6.2 _______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
