I need to reuse this part, without the destruction, for refcounting
tests.
---
 .../spec/ext_image_dma_buf_import/sample_common.c  | 40 ++++++++++++++++------
 .../spec/ext_image_dma_buf_import/sample_common.h  |  4 +++
 2 files changed, 34 insertions(+), 10 deletions(-)

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 7373cd4c5176..370baa426693 100644
--- a/tests/spec/ext_image_dma_buf_import/sample_common.c
+++ b/tests/spec/ext_image_dma_buf_import/sample_common.c
@@ -110,9 +110,9 @@ sample_and_destroy_img(unsigned w, unsigned h, EGLImageKHR 
img)
        return PIGLIT_PASS;
 }
 
-static enum piglit_result
-sample_buffer(void *buf, int fd, int fourcc, unsigned w, unsigned h,
-       unsigned stride, unsigned offset)
+enum piglit_result
+egl_image_for_dma_buf_fd(int fd, int fourcc, int w, int h,
+                        unsigned stride, unsigned offset, EGLImageKHR *out_img)
 {
        EGLint error;
        EGLImageKHR img;
@@ -170,10 +170,9 @@ sample_buffer(void *buf, int fd, int fourcc, unsigned w, 
unsigned h,
        }
 
        img = eglCreateImageKHR(eglGetCurrentDisplay(), EGL_NO_CONTEXT,
-                               EGL_LINUX_DMA_BUF_EXT, (EGLClientBuffer)0, 
attr);
-
-       /* Release the creator side of the buffer. */
-       piglit_destroy_dma_buf(buf);
+                                EGL_LINUX_DMA_BUF_EXT, (EGLClientBuffer)0,
+                                attr);
+       *out_img = img;
 
        error = eglGetError();
 
@@ -185,9 +184,6 @@ sample_buffer(void *buf, int fd, int fourcc, unsigned w, 
unsigned h,
                printf("eglCreateImageKHR() failed: %s 0x%x\n",
                        piglit_get_egl_error_name(error), error);
 
-               /* Close the descriptor also, EGL does not have ownership */
-               close(fd);
-
                return PIGLIT_FAIL;
        }
 
@@ -196,6 +192,30 @@ sample_buffer(void *buf, int fd, int fourcc, unsigned w, 
unsigned h,
                return PIGLIT_FAIL;
        }
 
+       *out_img = img;
+       return PIGLIT_PASS;
+}
+
+static enum piglit_result
+sample_buffer(void *buf, int fd, int fourcc, unsigned w, unsigned h,
+             unsigned stride, unsigned offset)
+{
+       enum piglit_result res;
+       EGLImageKHR img;
+
+       res = egl_image_for_dma_buf_fd(fd, fourcc, w, h, stride, offset, &img);
+
+       /* Release the creator side of the buffer. */
+       piglit_destroy_dma_buf(buf);
+
+       if (!img) {
+               /* Close the descriptor also, EGL does not have ownership */
+               close(fd);
+       }
+
+       if (res != PIGLIT_PASS)
+               return res;
+
        return sample_and_destroy_img(w, h, img);
 }
 
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 8559e9fe5896..7160b816ca03 100644
--- a/tests/spec/ext_image_dma_buf_import/sample_common.h
+++ b/tests/spec/ext_image_dma_buf_import/sample_common.h
@@ -35,4 +35,8 @@ enum piglit_result
 dma_buf_create_and_sample_32bpp(unsigned w, unsigned h, unsigned cpp,
                                int fourcc, const unsigned char *src);
 
+enum piglit_result
+egl_image_for_dma_buf_fd(int fd, int fourcc, int w, int h,
+                        unsigned stride, unsigned offset, EGLImageKHR 
*out_img);
+
 #endif /* SAMPLE_COMMON_H */
-- 
2.8.1

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

Reply via email to