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

Reply via email to